home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d27 / inter490.arc / INTERRUP.C < prev    next >
Text File  |  1990-08-04  |  200KB  |  5,456 lines

  1. Interrupt List, part 3 of 4
  2. This compilation is Copyright (c) 1989,1990 Ralf Brown
  3. ---------------------------------------------
  4. INT 28 - DOS 2+ internal - KEYBOARD BUSY LOOP
  5.    This interrupt is called from inside the "get input from keyboard" routine
  6.    in DOS, if and only if it is safe to use INT 21 to access the disk at that
  7.    time.  It is used primarily by the PRINT.COM routines and TSR programs, but
  8.    any number of other routines could be chained to it by saving the original
  9.    vector, and calling it with a FAR call (or just JMPing to it) at the end of
  10.    the new routine.
  11.  
  12.    The INT 28h handler may invoke any INT 21h function except functions 00h
  13.    through 0Ch (and 50h/51h under DOS 2.xx unless DOS CriticalErr flag is set).
  14.    Calls to functions 3Fh and 40h may not use a handle which refers to CON.
  15.  
  16.    Until some program installs its own routine, this interrupt vector simply
  17.    points to an IRET opcode.
  18.  
  19. Note:    supported in OS/2 compatibility box
  20. SeeAlso: INT 2A/AH=84h
  21. ---------------------------------------------
  22. INT 29 - DOS 2+ internal - FAST PUTCHAR
  23.     AL = character to display
  24. Return: nothing
  25. Notes:    this interrupt is called from the DOS output routines if output is
  26.       going to a device rather than a file, and the device driver's
  27.       attribute word has bit 4 (10h) set.
  28.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  29.     the default handler under DESQview 2.2 understands the <Esc>[2J
  30.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  31. ---------------------------------------------
  32. INT 2A - Microsoft/LANtastic NETWORK - INSTALLATION CHECK
  33.     AH = 00h
  34. Return: AH <> 00h if installed
  35. ---------------------------------------------
  36. INT 2A - Microsoft/LANtastic NETWORK - EXECUTE NETBIOS REQUEST, NO ERROR RETRY
  37.     AH = 01h
  38.     ES:BX -> NCB (see INT 5C)
  39. Return: AL = NetBIOS error code
  40.     AH = 00h if no error
  41.        = 01h on error
  42. SeeAlso: AH=04h, INT 5C
  43. ---------------------------------------------
  44. INT 2A - Microsoft Networks - SET NET PRINTER MODE
  45.     AH = 02h
  46.     ???
  47. Return: ???
  48. ---------------------------------------------
  49. INT 2A - Microsoft Networks - CHECK DIRECT I/O
  50.     AX = 0300h
  51.     DS:SI -> ASCIZ disk device name (may be full path or only drive
  52.         specifier--must include the colon)
  53. Return: CF clear if absolute disk access allowed
  54. Notes:    do not use direct disk accesses if this function returns CF set or the
  55.       device is redirected (INT 21/AX=5F02h)
  56.     may take some time to execute
  57. SeeAlso: INT 13, INT 25, INT 26, INT 21/AX=5F02h
  58. ---------------------------------------------
  59. INT 2A - Microsoft/LANtastic NETWORK - EXECUTE NETBIOS REQUEST
  60.     AH = 04h
  61.     AL = 00h for error retry, 01h for no retry
  62.     ES:BX -> NCB (see INT 5C)
  63. Return: AX = 0000h for no error
  64.     AH = 01h, AL = error code
  65. Note:    request automatically retried (if AL=00h) on errors 09h, 12h, and 21h
  66. SeeAlso: AH=01h, INT 5C
  67. ---------------------------------------------
  68. INT 2A - Microsoft/LANtastic NETWORK - GET NETWORK RESOURCE INFORMATION
  69.     AX = 0500h
  70. Return: AX = reserved
  71.     BX = number of network names available
  72.     CX = number of commands (NCBs) available
  73.     DX = number of sessions available
  74. ---------------------------------------------
  75. INT 2A - NETBIOS - NETWORK PRINT-STREAM CONTROL
  76.     AH = 06h
  77.     AL = 01h set concatenation mode (all printer output put in one job)
  78.          02h set truncation mode (default)
  79.          printer open/close starts new print job
  80.          03h flush printer output and start new print job
  81. Return: CF set on error
  82.         AX = error code
  83.     CF clear if successful
  84. Note:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  85. SeeAlso: INT 21/AX=5D08h,5D09h, INT 2F/AX=1125h
  86. ---------------------------------------------
  87. INT 2A - MS Networks or NETBIOS - ???
  88.     AX = 2001h
  89.     ???
  90. Return: ???
  91. Note:    intercepted by DESQview 2.x
  92. ---------------------------------------------
  93. INT 2A - Network - ???
  94.     AX = 2002h
  95.     ???
  96. Return: ???
  97. Note:    called by MSDOS 3.30 APPEND
  98. ---------------------------------------------
  99. INT 2A - Network - ???
  100.     AX = 2003h
  101.     ???
  102. Return: ???
  103. Note:    called by MSDOS 3.30 APPEND
  104. ---------------------------------------------
  105. INT 2A - Microsoft Networks - BEGIN DOS CRITICAL SECTION
  106.     AH = 80h
  107.     AL = critical section number (00h-0Fh)
  108.         01h  DOS kernel, SHARE.EXE
  109.         02h  DOS kernel
  110.         05h  DOS 4+ IFSFUNC
  111.         06h  DOS 4+ IFSFUNC
  112.         08h  ASSIGN.COM
  113. Notes:    normally hooked to avoid interrupting a critical section, rather than
  114.       called
  115.     the handler should ensure that none of the critical sections are
  116.       reentered, usually by suspending a task which attempts to reenter
  117.       an active critical section
  118. SeeAlso: AH=81h, AH=82h, AH=87h, INT 21/AX=5D06h,5D0Bh
  119. ---------------------------------------------
  120. INT 2A - Microsoft Networks - END DOS CRITICAL SECTION
  121.     AH = 81h
  122.     AL = critical section number (00h-0Fh) (see AH=80h)
  123. Notes:    normally hooked rather than called
  124.     the handler should reawaken any tasks which were suspended due to an
  125.       attempt to enter the specified critical section
  126. SeeAlso: AH=80h, AH=82h, AH=87h
  127. ---------------------------------------------
  128. INT 2A - Microsoft Networks - END DOS CRITICAL SECTIONS 0 THROUGH 7
  129.     AH = 82h
  130. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  131.       greater than 0Ch except 59h, and on process termination
  132.     the handler should reawaken any tasks which were suspended due to an
  133.       attempt to enter one of the critical sections 0 through 7
  134. SeeAlso: AH=81h
  135. ---------------------------------------------
  136. INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP
  137.     AH = 84h
  138. Note:    similar to DOS's INT 28h
  139. SeeAlso: INT 28
  140. ---------------------------------------------
  141. INT 2A - ??? - CRITICAL SECTION
  142.     AH = 87h
  143.     AL = start/end
  144.         00h start
  145.         01h end
  146. Note:    called by PRINT.COM
  147. SeeAlso: AH=80h,81h
  148. ---------------------------------------------
  149. INT 2A - Network - ???
  150.     AH = 89h
  151.     AL = ???  (ASSIGN uses 08h)
  152.     ???
  153. Return: ???
  154. ---------------------------------------------
  155. INT 2A - Network - ???
  156.     AH = C2h
  157.     AL = subfunction
  158.         07h ???
  159.         08h ???
  160.     BX = 0001h
  161.     ???
  162. Return: ???
  163. Note:    called by DOS 3.30 APPEND
  164. ---------------------------------------------
  165. INT 2B - Internal routine for MSDOS (IRET)
  166. ---------------------------------------------
  167. INT 2C - Internal routine for MSDOS (IRET)
  168. ---------------------------------------------
  169. INT 2D - Internal routine for MSDOS (IRET)
  170. ---------------------------------------------
  171. INT 2E - DOS 2+ internal - EXECUTE COMMAND
  172.     DS:SI -> counted CR-terminated command string
  173. Notes:    the top-level command.com executes the command
  174.     all registers including SS and SP are destroyed as in INT 21/AH=4Bh
  175.     Since COMMAND.COM processes the string as if typed from the keyboard,
  176.       the transient portion needs to be present, and the calling program
  177.       must ensure that sufficient memory to load the transient portion can
  178.       be allocated by DOS if necessary.
  179.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement
  180. ---------------------------------------------
  181. INT 2F - Multiplex - notes
  182.     AH = identifier of program which is to handle the interrupt
  183.        00h-7Fh reserved for DOS
  184.        C0h-FFh reserved for applications
  185.     AL is the function code
  186. This is a general mechanism for verifying the presence of a TSR and 
  187. communicating with it.
  188. ---------------------------------------------
  189. INT 2F - Multiplex - BMB Compuscience Canada Utilities Interface
  190.     AH = xx (dynamically assigned based upon a search for a multiplex
  191.          number which doesn't answer installed)
  192.     AL = 00h install check
  193.     ES:DI = EBEB:BEBE
  194. Return: AL = 00h not installed
  195.          01h not installed, not OK to install
  196.          FFh installed and if ES:DI != EBEB:BEBE then ES:DI will point
  197.          to a string 'BMB xxxx' where xxxx is a product name and
  198.          version
  199. ---------------------------------------------
  200. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  201.     AH = 00h
  202.     ???
  203. Return: ???
  204. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  205.     values in AH other than 00h or 01h cause PRINT to return the number of
  206.       files in the queue in AH
  207. SeeAlso: AH=01h
  208. ---------------------------------------------
  209. INT 2F - Multiplex - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  210.     AX = 0080h
  211. Return: after PRINT executes
  212. ---------------------------------------------
  213. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  214.     AH = 01h
  215.     ???
  216. Return: ???
  217. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  218.     values in AH other than 00h or 01h cause PRINT to return the number of
  219.       files in the queue in AH
  220. SeeAlso: AH=00h
  221. ---------------------------------------------
  222. INT 2F - Multiplex - DOS 3+ PRINT.COM - INSTALLATION CHECK
  223.     AX = 0100h
  224. Return: AL =
  225.         00h not installed, OK to install
  226.         01h not installed, not OK to install
  227.         FFh installed
  228. ---------------------------------------------
  229. INT 2F - Multiplex - DOS 3+ PRINT.COM - SUBMIT FILE
  230.     AX = 0101h
  231.     DS:DX -> packet (see below)
  232. Return: CF set on error
  233.         AX = error code
  234.     CF clear if successful
  235.         AL = 01h added to queue
  236.          9Eh now printing
  237. SeeAlso: AX=0102h
  238.  
  239. Format of submit packet:
  240. Offset    Size    Description
  241.  00h    BYTE    level (must be 0)
  242.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  243. ---------------------------------------------
  244. INT 2F - Multiplex - DOS 3+ PRINT.COM - REMOVE FILE
  245.     AX = 0102h
  246.     DS:DX -> ASCIZ file name (wildcards allowed)
  247. Return: CF set on error
  248.         AX = error code
  249.     CF clear if successful
  250. SeeAlso: AX=0103h
  251. ---------------------------------------------
  252. INT 2F - Multiplex - DOS 3+ PRINT.COM - REMOVE ALL FILES
  253.     AX = 0103h
  254. Return: CF set on error
  255.         AX = error code
  256.     CF clear if successful
  257. SeeAlso: AX=0102h
  258. ---------------------------------------------
  259. INT 2F - Multiplex - DOS 3+ PRINT.COM - HOLD QUEUE/GET STATUS
  260.     AX = 0104h
  261. Return: CF set on error
  262.         AX = error code
  263.         01h function invalid
  264.         02h file not found
  265.         03h path not found
  266.         04h too many open files
  267.         05h access denied
  268.         08h queue full
  269.         09h spooler busy
  270.         0Ch name too long
  271.         0Fh drive invalid
  272.     DX = error count
  273.     DS:SI -> print queue (null-string terminated list of 64-byte ASCIZ 
  274.          file names)
  275. SeeAlso: AX=0105h
  276. ---------------------------------------------
  277. INT 2F - Multiplex - DOS 3+ PRINT.COM - RESTART QUEUE
  278.     AX = 0105h
  279. Return: CF set on error
  280.        AX = error code
  281.     CF clear if successful
  282. SeeAlso: AX=0104h
  283. ---------------------------------------------
  284. INT 2F - Multiplex - DOS 3.3+ PRINT.COM - CHECK IF ERROR ON OUTPUT DEVICE
  285.     AX = 0106h
  286. Return: CF set on error
  287.         AX = error code
  288.         DS:SI -> device driver header
  289.     CF clear if successful
  290.         AX = 0000h
  291. Note:    eventually calls device driver for spooled device with request 0Ah,
  292.       looping until not busy or timeout
  293. SeeAlso: AX=0104h
  294. ---------------------------------------------
  295. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALL CHECK
  296.     AX = 0200h
  297. Return: AL = FFh if installed
  298. ---------------------------------------------
  299. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  300.     AX = 0201h
  301. Return: nothing???
  302. Notes:    called by DOS 3.3+ PRINT.COM
  303.     AX=0202h appears to be the opposite function
  304. SeeAlso: AX=0202h
  305. ---------------------------------------------
  306. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  307.     AX = 0202h
  308.     ???
  309. Return: nothing???
  310. Note:    called by DOS 3.3+ PRINT.COM
  311. SeeAlso: AX=0201h
  312. ---------------------------------------------
  313. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  314.     AX = 0203h
  315. Return: nothing???
  316. Notes:    called by DOS 3.3+ PRINT.COM
  317.     AX=0204h appears to be the opposite function
  318. SeeAlso: AX=0204h
  319. ---------------------------------------------
  320. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  321.     AX = 0204h
  322.     ???
  323. Return: nothing???
  324. Note:    called by DOS 3.3 PRINT.COM
  325. ---------------------------------------------
  326. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  327.     AX = 02xxh
  328.     ???
  329. Return: ???
  330. ---------------------------------------------
  331. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  332.     AX = 0500h
  333. Return: AL = 00h not installed, OK to install
  334.          01h not installed, can't install
  335.          FFh installed
  336. Note:    this set of functions allows a user program to partially or completely
  337.       override the default critical error handler in COMMAND.COM
  338. SeeAlso: INT 24
  339. ---------------------------------------------
  340. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  341.     AH = 05h
  342. ---DOS 3.x---
  343.     AL = extended error code (not zero)
  344. ---DOS 4.x---
  345.     AL = error type
  346.         01h DOS extended error code
  347.         02h parameter error
  348.     BX = error code
  349. Return: CF clear if successful
  350.         ES:DI -> ASCIZ error message (read-only)
  351.         AL = ???
  352.     CF set if error code can't be converted to string
  353. Notes:    called at start of COMMAND.COM's default critical error handler if 
  354.       installed by a user program, allowing partial or complete overriding
  355.       of the default error message
  356.     subfunction 02h called by many DOS 4 external programs
  357. SeeAlso: AX=122Eh, INT 24
  358. ---------------------------------------------
  359. INT 2F - Multiplex - ASSIGN - INSTALLATION CHECK
  360.     AX = 0600h
  361. Return: AL <> 00h if installed
  362. ---------------------------------------------
  363. INT 2F - Multiplex - ASSIGN - GET MEMORY SEGMENT
  364.     AX = 0601h
  365. Return: ES = segment of ASSIGN work area and assignment table
  366. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  367.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  368. ---------------------------------------------
  369. INT 2F - Multiplex - DRIVER.SYS support - INSTALLATION CHECK
  370.     AX = 0800h
  371. Return:    AL = 00h not installed, OK to install
  372.          01h not installed, not OK to install
  373.          FFh installed
  374. ---------------------------------------------
  375. INT 2F - Multiplex - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  376.     AX = 0801h
  377.     DS:DI -> drive data table (see AX=0803h)
  378. Notes:    moves down internal list of drive data tables, copying and modifying
  379.       the drive description flags word for tables referencing same physical
  380.       drive
  381.     data table appended to chain of tables
  382. SeeAlso: AX=0803h
  383. ---------------------------------------------
  384. INT 2F - Multiplex - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  385.     AX = 0802h
  386.     ES:BX -> device driver request header (see below)
  387. Return: request header updated as per requested operation
  388.  
  389. Format of device driver request header:
  390. Offset    Size    Description
  391.  00h    BYTE    length of request header
  392.  01h    BYTE    subunit within device driver
  393.  02h    BYTE    command code (see below)
  394.  03h    WORD    status (filled in by device driver)
  395.         bit 15: error
  396.         bits 14-10: reserved
  397.         bit 9: busy
  398.         bit 8: done
  399.         bits 7-0: error code if bit 15 set (see below)
  400.  05h  8 BYTEs    reserved (unused in DOS 2.x and 3.x)
  401. ---command code 00h---
  402.  0Dh    BYTE    number of units (set by driver)
  403.  0Eh    DWORD    address of first free byte following driver (set by driver)
  404.  12h    DWORD    pointer to BPB array (set by block drivers only)
  405.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  406. ---command code 01h---
  407.  0Dh    BYTE    media descriptor
  408.  0Eh    BYTE    returned status
  409.         00h don't know
  410.         01h media has not changed
  411.         FFh media has been changed
  412.  0Fh    DWORD    (DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in
  413.           device header set and disk changed (set by driver)
  414. ---command code 02h---
  415.  0Dh    BYTE    media descriptor
  416.  0Eh    DWORD    transfer address
  417.         -> scratch sector if NON-IBM FORMAT bit in device header set
  418.         -> first FAT sector otherwise
  419.  12h    DWORD    pointer to BPB (set by driver)
  420. ---command codes 03h,0Ch---
  421.  0Dh    BYTE    media descriptor (block devices only)
  422.  0Eh    DWORD    transfer address
  423.  12h    WORD    byte count (character devices) or sector count (block devices)
  424.  14h    WORD    starting sector number (block devices only)
  425. ---command codes 04h,08h,09h---
  426.  0Dh    BYTE    media descriptor (block devices only)
  427.  0Eh    DWORD    transfer address
  428.  12h    WORD    byte count (character devices) or sector count (block devices)
  429.  14h    WORD    starting sector number (block devices only)
  430.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  431. ---command code 05h---
  432.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  433. ---command codes 06h,07h,0Ah,0Bh---
  434.  no further fields
  435. ---command code 10h---
  436.  0Dh    BYTE    unused
  437.  0Eh    DWORD    transfer address
  438.  12h    WORD    byte count
  439. ---command code 13h---
  440.  0Dh    BYTE    category code
  441.         00h unknown
  442.         01h COMn:
  443.         03h CON
  444.         05h LPTn:
  445.         08h disk
  446.  0Eh    BYTE    function code
  447.  0Fh    DWORD    ??? (apparently unused in DOS 3.3)
  448.  13h    DWORD    pointer to parameter block from INT 21/AX=440Dh
  449.  
  450. Values for command code:
  451.     00h INIT
  452.     01h MEDIA CHECK (block devices)
  453.     02h BUILD BPB (block devices)
  454.     03h IOCTL INPUT
  455.     04h INPUT
  456.     05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  457.     06h INPUT STATUS (character devices)
  458.     07h INPUT FLUSH (character devices)
  459.     08h OUTPUT
  460.     09h OUTPUT WITH VERIFY
  461.     0Ah OUTPUT STATUS (character devices)
  462.     0Bh OUTPUT FLUSH (character devices)
  463.     0Ch IOCTL OUTPUT
  464.     0Dh (DOS 3+) DEVICE OPEN
  465.     0Eh (DOS 3+) DEVICE CLOSE
  466.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  467.     10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  468.     11h unused
  469.     12h unused
  470.     13h (DOS 3.2+) GENERIC IOCTL
  471.     14h unused
  472.     15h unused
  473.     16h unused
  474.     17h (DOS 3.2+) GET LOGICAL DEVICE
  475.     18h (DOS 3.2+) SET LOGICAL DEVICE
  476.     80h (CD-ROM) READ LONG
  477.     81h (CD-ROM) reserved
  478.     82h (CD-ROM) READ LONG PREFETCH
  479.     83h (CD-ROM) SEEK
  480.     84h (CD-ROM) PLAY AUDIO
  481.     85h (CD-ROM) STOP AUDIO
  482.     86h (CD-ROM) WRITE LONG
  483.     87h (CD-ROM) WRITE LONG VERIFY
  484.     88h (CD-ROM) RESUME AUDIO
  485.  
  486. Values for error code:
  487.     00h write-protect violation
  488.     01h unknown unit
  489.     02h drive not ready
  490.     03h unknown command
  491.     04h CRC error
  492.     05h bad drive request structure length
  493.     06h seek error
  494.     07h unknown media
  495.     08h sector not found
  496.     09h printer out of paper
  497.     0Ah write fault
  498.     0Bh read fault
  499.     0Ch general failure
  500.     0Dh reserved
  501.     0Eh reserved
  502.     0Fh invalid disk change
  503. ---------------------------------------------
  504. INT 2F - Multiplex - DOS 4.x DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  505.     AX = 0803h
  506. Return: DS:DI -> first drive data table in list
  507. SeeAlso: AX=0801h
  508.  
  509. Format of DOS 3.3 drive data table:
  510. Offset    Size    Description
  511.  00h    DWORD    pointer to next table
  512.  04h    BYTE    physical unit number (for INT 13)
  513.  05h    BYTE    logical drive number
  514.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  515.         Offset    Size    Description
  516.          00h    WORD    bytes per sector
  517.          02h    BYTE    sectors per cluster, FFh if unknown
  518.          03h    WORD    number of reserved sectors
  519.          05h    BYTE    number of FATs
  520.          06h    WORD    number of root dir entries
  521.          08h    WORD    total sectors
  522.          0Ah    BYTE    media descriptor, 00h if unknown
  523.          0Bh    WORD    sectors per FAT
  524.          0Dh    WORD    sectors per track
  525.          0Fh    WORD    number of heads
  526.          11h    WORD    number of hidden sectors
  527.  19h      BYTE    ???
  528.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  529.  1Ch 11 BYTEs    volume label or "NO NAME    " if none
  530.  27h    BYTE    terminating null for volume label???
  531.  28h    BYTE    device type (see INT 21/AX=440Dh)
  532.  29h    WORD    bit flags describing drive
  533.         bit 0: fixed media
  534.         bit 1: door lock supported
  535.         bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
  536.         bit 3: all sectors in a track are the same size
  537.         bit 4: physical drive has multiple logical units
  538.         bit 5: current logical drive for physical drive
  539.         bit 6: ???
  540.         bit 7: ???
  541.         bit 8: ??? (related to disk change detection)
  542.  2Bh    WORD    number of cylinders
  543.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  544.  40h  3 BYTEs    ???
  545.  43h  9 BYTEs    filesystem type???, default = "NO NAME  "
  546.  4Ch    BYTE    terminating null for filesystem type???
  547.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  548.         removable media only???
  549.  
  550. Format of DOS 4.01 drive data table:
  551. Offset    Size    Description
  552.  00h    DWORD    pointer to next table
  553.  04h    BYTE    physical unit number (for INT 13)
  554.  05h    BYTE    logical drive number
  555.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  556.         Offset    Size    Description
  557.          00h    WORD    bytes per sector
  558.          02h    BYTE    sectors per cluster, FFh if unknown
  559.          03h    WORD    number of reserved sectors
  560.          05h    BYTE    number of FATs
  561.          06h    WORD    number of root dir entries
  562.          08h    WORD    total sectors
  563.          0Ah    BYTE    media descriptor, 00h if unknown
  564.          0Bh    WORD    sectors per FAT
  565.          0Dh    WORD    sectors per track
  566.          0Fh    WORD    number of heads
  567.          11h    WORD    number of hidden sectors
  568.  19h  9    BYTEs    ???
  569.  22h    BYTE    device type (see INT 21/AX=440Dh)
  570.  23h    WORD    bit flags describing drive
  571.         bit 0: fixed media
  572.         bit 1: door lock supported
  573.         bit 2: ???
  574.         bit 3: all sectors in a track are the same size
  575.         bit 4: physical drive has multiple logical units
  576.         bit 5: current logical drive for physical drive
  577.         bit 6: ???
  578.         bit 7: ???
  579.         bit 8: ???
  580.  25h    WORD    number of cylinders
  581.  27h 19 BYTEs    BIOS Parameter Block for highest capacity supported
  582.  3Ah 13 BYTEs    ???
  583.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  584.  4Bh 11 BYTEs    volume label or "NO NAME    " if none
  585.  56h    BYTE    terminating null for volume label???
  586.  57h    DWORD    serial number
  587.  5Bh  8 BYTEs    filesystem type ("FAT12   " or "FAT16   ")
  588.  63h    BYTE    terminating null for filesystem type???
  589. ---------------------------------------------
  590. INT 2F - Multiplex - SHARE - INSTALLATION CHECK
  591.     AX = 1000h
  592. Return: AL = 00h  not installed, OK to install
  593.          01h  not installed, not OK to install
  594.          FFh  installed
  595. BUG:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  596.       (08E9: OR  AL,AL
  597.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  598.     values of AL other than described here put PCDOS 4.00 into the same
  599.       loop (the buggy instructions are the same)
  600. SeeAlso: INT 21/AH=52h
  601. ---------------------------------------------
  602. INT 2F - Multiplex - DOS 4.0 SHARE internal - ???
  603.     AX = 1040h
  604.     ???
  605. Return: ???
  606. ---------------------------------------------
  607. INT 2F - Multiplex - DOS 4.0 SHARE internal - CLEAR ??? FLAG
  608.     AX = 1080h
  609. Return: AL = F0h function supported
  610. ---------------------------------------------
  611. INT 2F - Multiplex - DOS 4.0 SHARE internal - SET ??? FLAG
  612.     AX = 1081h
  613. Return: AL = F0h function supported
  614. ---------------------------------------------
  615. INT 2F - Multiplex - NETWORK REDIRECTOR - INSTALLATION CHECK
  616.     AX = 1100h
  617. Return: AL = 00h  not installed, OK to install
  618.          01h  not installed, not OK to install
  619.          FFh  installed
  620. Notes:    called by DOS 3.1+ kernel
  621.     In DOS 4+, the 11xx calls are all in IFSFUNC.EXE, not in the PC LAN
  622.       Program redirector. 
  623. ---------------------------------------------
  624. INT 2F - Multiplex - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  625.     AX = 1101h
  626.     SS = DOS CS
  627.     SDA first filename pointer -> directory name
  628.     SDA CDS pointer -> current directory structure for drive with dir
  629. Return: CF set on error
  630.         AX = DOS error code (see INT 21/AH=59h)
  631.     CF clear if successful
  632. Note:    called by DOS 3.1+ kernel
  633. SeeAlso: AX=1103h, AX=1105h, INT 21/AH=3Ah
  634. ---------------------------------------------
  635. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - REMOVE REMOTE DIRECTORY
  636.     AX = 1102h
  637.     SS = DOS CS
  638.     SDA first filename pointer -> directory name
  639.     SDA CDS pointer -> current directory structure for drive with dir
  640. Return: CF set on error
  641.         AX = DOS error code (see INT 21/AH=59h)
  642.     CF clear if successful
  643. Note:    appears to be identical to AX=1101h
  644. SeeAlso: AX=1101h
  645. ---------------------------------------------
  646. INT 2F - Multiplex - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  647.     AX = 1103h
  648.     SS = DOS CS
  649.     SDA first filename pointer -> directory name
  650.     SDA CDS pointer -> current directory structure for drive with dir
  651. Return: CF set on error
  652.         AX = DOS error code (see INT 21/AH=59h)
  653.     CF clear if successful
  654. Note:    called by DOS 3.1+ kernel
  655. SeeAlso: AX=1101h, AX=1105h, INT 21/AH=39h
  656. ---------------------------------------------
  657. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - MAKE REMOTE DIRECTORY
  658.     AX = 1104h
  659.     SS = DOS CS
  660.     SDA first filename pointer -> directory name
  661.     SDA CDS pointer -> current directory structure for drive with dir
  662. Return: CF set on error
  663.         AX = DOS error code (see INT 21/AH=59h)
  664.     CF clear if successful
  665. Note:    appears to be identical to AX=1103h
  666. SeeAlso: AX=1103h
  667. ---------------------------------------------
  668. INT 2F - Multiplex - NETWORK REDIRECTOR - CHDIR
  669.     AX = 1105h
  670.     SS = DOS CS
  671.     SDA first filename pointer -> directory name
  672.     SDA CDS pointer -> current directory structure for drive with dir
  673. Return: CF set on error
  674.         AX = DOS error code (see INT 21/AH=59h)
  675.     CF clear if successful
  676. Note:    called by DOS 3.1+ kernel
  677. SeeAlso: AX=1101h, AX=1103h, INT 21/AH=3Bh
  678. ---------------------------------------------
  679. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  680.     AX = 1106h
  681.     ES:DI -> SFT
  682.     ???
  683. Return: CF set on error
  684.         AX = DOS error code (see INT 21/AH=59h)
  685.     CF clear if successful
  686. Note:    called by DOS 3.1+ kernel
  687. SeeAlso: AX=1201h,1227h, INT 21/AH=3Eh
  688. ---------------------------------------------
  689. INT 2F - Multiplex - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  690.     AX = 1107h
  691.     ES:DI -> SFT
  692.     ???
  693. Return: ???
  694. Note:    called by DOS 3.1+ kernel
  695. SeeAlso: INT 21/AH=68h, INT 21/AX=5D01h
  696. ---------------------------------------------
  697. INT 2F - Multiplex - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  698.     AX = 1108h
  699.     ES:DI -> SFT
  700.     CX = number of bytes
  701.     SS = DOS CS
  702.     SDA DTA field -> user buffer
  703. Return: CF set on error
  704.     CF clear if successful
  705.         CX = number of bytes read
  706. Note:    called by DOS 3.1+ kernel
  707. SeeAlso: AX=1109h,1229h, INT 21/AH=3Fh, INT 21/AX=5D06h
  708. ---------------------------------------------
  709. INT 2F - Multiplex - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  710.     AX = 1109h
  711.     ES:DI -> SFT
  712.     CX = number of bytes
  713.     SS = DOS CS
  714.     SDA DTA field -> user buffer
  715. Return: CF set on error
  716.     CF clear if successful
  717.         CX = number of bytes written
  718. Note:    called by DOS 3.1+ kernel
  719. SeeAlso: AX=1107h, AX=1108h, INT 21/AH=40h, INT 21/AX=5D06h
  720. ---------------------------------------------
  721. INT 2F - Multiplex - NETWORK REDIRECTOR - LOCK REGION OF FILE
  722.     AX = 110Ah
  723.     BX = file handle
  724.     CX:DX = starting offset
  725.     SI = high word of size
  726.     STACK: WORD low word of size
  727.     ES:DI -> SFT
  728.     SS = DOS CS
  729. Return: CF set on error
  730.        AL = DOS error code (see INT 21/AH=59h)
  731.     STACK unchanged
  732. Note:    called by DOS 3.1+ kernel
  733. SeeAlso: AX=110Bh, INT 21/AH=5Ch
  734. ---------------------------------------------
  735. INT 2F - Multiplex - NETWORK REDIRECTOR - UNLOCK REGION OF FILE
  736.     AX = 110Bh
  737.     BX = file handle
  738.     CX:DX = starting offset
  739.     SI = high word of size
  740.     STACK: WORD low word of size
  741.     ES:DI -> SFT for file
  742. Return: CF set on error
  743.        AL = DOS error code (see INT 21/AH=59h)
  744.     STACK unchanged
  745. Note:    called by DOS 3.1+ kernel
  746. SeeAlso: AX=110Ah, INT 21/AH=5Ch
  747. ---------------------------------------------
  748. INT 2F - Multiplex - NETWORK REDIRECTOR - GET DISK SPACE
  749.     AX = 110Ch
  750.     ES:DI -> current directory structure for desired drive
  751. Return: AL = sectors per cluster
  752.     AH = ???
  753.     BX = total clusters
  754.     CX = bytes per sector
  755.     DX = number of available clusters
  756. Note:    called by DOS 3.1+ kernel
  757. SeeAlso: INT 21/AH=36h
  758. ---------------------------------------------
  759. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  760.     AX = 110Dh
  761.     SDA first filename pointer -> name of file
  762.     ???
  763. Return: ???
  764. Note:    appears to be similar to AX=110Fh
  765. SeeAlso: AX=110Fh
  766. ---------------------------------------------
  767. INT 2F - Multiplex - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  768.     AX = 110Eh
  769.     SS = DOS CS
  770.     SDA first filename pointer -> name of file
  771.     STACK: WORD new file attributes
  772.     ???
  773. Return: CF set on error
  774.         AX = DOS error code (see INT 21/AH=59h)
  775.     CF clear if successful
  776.     STACK unchanged
  777. Note:    called by DOS 3.1+ kernel
  778. SeeAlso: AX=110Fh,INT 21/AX=4301h
  779. ---------------------------------------------
  780. INT 2F - Multiplex - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES
  781.     AX = 110Fh
  782.     SS = DOS CS
  783.     SDA first filename pointer -> name of file
  784.     ???
  785. Return: CF set on error
  786.         AX = DOS error code (see INT 21/AH=59h)
  787.     CF clear if successful
  788.         AX = file attributes
  789. Note:    called by DOS 3.1+ kernel
  790. SeeAlso: AX=110Eh,INT 21/AX=4300h
  791. ---------------------------------------------
  792. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  793.     AX = 1110h
  794.     SDA first filename pointer -> name of file
  795.     ???
  796. Return: ???
  797. Note:    appears to be similar to AX=110Eh
  798. SeeAlso: AX=110Eh
  799. ---------------------------------------------
  800. INT 2F - Multiplex - NETWORK REDIRECTOR - RENAME REMOTE FILE
  801.     AX = 1111h
  802.     SS = DS = DOS CS
  803.     SDA first filename pointer = offset of old name
  804.     SDA second filename pointer = offset of new name
  805. Return: CF set on error
  806.         AX = DOS error code (see INT 21/AH=59h)
  807.     CF clear if successful
  808. Note:    called by DOS 3.1+ kernel
  809. SeeAlso: INT 21/AH=56h
  810. ---------------------------------------------
  811. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  812.     AX = 1112h
  813.     SS = DS = DOS CS
  814.     SDA first filename pointer -> name of file
  815.     ???
  816. Return: ???
  817. SeeAlso: AX=1111h
  818. ---------------------------------------------
  819. INT 2F - Multiplex - NETWORK REDIRECTOR - DELETE REMOTE FILE
  820.     AX = 1113h
  821.     SS = DS = DOS CS
  822.     SDA first filename pointer = offset of filename in DOS CS
  823. Return: CF set on error
  824.         AX = DOS error code (see INT 21/AH=59h)
  825.     CF clear if successful
  826. Note:    called by DOS 3.1+ kernel
  827. SeeAlso: INT 21/AH=41h
  828. ---------------------------------------------
  829. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  830.     AX = 1114h
  831.     SDA first filename pointer -> name of file
  832.     ???
  833. Return: ???
  834. SeeAlso: AX=1113h
  835. ---------------------------------------------
  836. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  837.     AX = 1115h
  838.     SS = DOS CS
  839.     ES:DI -> SFT ???
  840.     ???
  841. Return: ???
  842. SeeAlso: AX=112Eh
  843. ---------------------------------------------
  844. INT 2F - Multiplex - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE???
  845.     AX = 1116h
  846.     SS = DOS CS
  847.     SDA first filename pointer -> name of file to open
  848.     ???
  849. Return: ???
  850. Note:    called by DOS 3.1+ kernel
  851. SeeAlso: AX=1106h,1117h,1118h, INT 21/AH=3Dh
  852. ---------------------------------------------
  853. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE REMOTE FILE???
  854.     AX = 1117h
  855.     SS = DOS CS
  856.     SDA first filename pointer -> name of file to open
  857.     STACK: WORD ???
  858. Return: ???
  859.     STACK unchanged
  860. Notes:    one of AX=1117h and AX=1118h probably truncates an existing remote file
  861.     called by DOS 3.1+ kernel
  862. SeeAlso: AX=1106h,1116h,1118h, INT 21/AH=3Ch
  863. ---------------------------------------------
  864. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE REMOTE FILE???
  865.     AX = 1118h
  866.     SS = DOS CS
  867.     SDA first filename pointer -> name of file to open
  868.     STACK: WORD ???
  869. Return: ???
  870.     STACK unchanged
  871. Notes:    one of AX=1117h and AX=1118h probably truncates an existing remote file
  872.     called by DOS 3.1+ kernel
  873. SeeAlso: AX=1106h,1116h,1117h, INT 21/AH=3Ch
  874. ---------------------------------------------
  875. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  876.     AX = 1119h
  877.     ???
  878. Return: ???
  879. Notes:    called by DOS 3.1+ kernel
  880.     DOS 4.0 IFSFUNC returns CF set, AX=0003h    
  881. ---------------------------------------------
  882. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  883.     AX = 111Ah
  884.     ???
  885. Return: CF set
  886.         AX = error code (03h for DOS 4.01 IFSFUNC)
  887. ---------------------------------------------
  888. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDFIRST
  889.     AX = 111Bh
  890.     SS = DS = DOS CS
  891.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  892.     ???
  893. Return: CF set on error
  894.         AX = DOS error code (see INT 21/AH=59h)
  895.     CF clear if successful
  896.         [DTA] = updated findfirst search data
  897.             (bit 7 of first byte must be set)
  898.         [DTA+15h] = standard directory entry for file
  899. Note:    called by DOS 3.1+ kernel
  900. SeeAlso: AX=111Ch, INT 21/AH=4Eh
  901. ---------------------------------------------
  902. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDNEXT
  903.     AX = 111Ch
  904.     SS = DS = DOS CS
  905.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  906. Return: CF set on error
  907.         AX = DOS error code (see INT 21/AH=59h)
  908.     CF clear if successful
  909.         [DTA] = updated findfirst search data
  910.             (bit 7 of first byte must be set)
  911.         [DTA+15h] = standard directory entry for file
  912. Note:    called by DOS 3.1+ kernel
  913. SeeAlso: AX=111Bh, INT 21/AH=4Fh
  914. ---------------------------------------------
  915. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS
  916.     AX = 111Dh
  917.     DS???
  918.     SS = DOS CS
  919. Return: ???
  920. Notes:    called by DOS 3.1+ kernel
  921.     closes all FCBs opened by process
  922. ---------------------------------------------
  923. INT 2F - Multiplex - NETWORK REDIRECTOR - DO REDIRECTION
  924.     AX = 111Eh
  925.     SS = DOS CS
  926.     STACK: WORD function to execute
  927.         5F00h  get redirection mode
  928.             BL = type (03h printer, 04h disk)
  929.             Return: BH = state (00h off, 01h on)
  930.         5F01h  set redirection mode
  931.             BL = type (03h printer, 04h disk)
  932.             BH = state (00h off, 01h on)
  933.         5F02h  get redirection list entry
  934.             BX = redirection list index
  935.             DS:SI -> 16-byte local device name buffer
  936.             ES:DI -> 128-byte network name buffer
  937.         5F03h  redirect device
  938.             BL = device type (see INT 21/AX=5F03h)
  939.             CX = stored parameter value
  940.             DS:SI -> ASCIZ source device name
  941.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  942.         5F04h  cancel redirection
  943.             DS:SI -> ASCIZ device name or network path
  944.         5F05h  get redirection list extended entry
  945.             BX = redirection list index
  946.             DS:SI -> buffer for ASCIZ source device name
  947.             ES:DI -> buffer for destination ASCIZ network path
  948.             Return: BH = status flag
  949.                 BL = type (03h printer, 04h disk)
  950.                 CX = stored parameter value
  951.                 BP = NETBIOS local session number
  952.         5F06h  similar to 5F05h???
  953. Return: CF set on error
  954.         AX = error code (see INT 21/AH=59h)
  955.     STACK unchanged
  956. Note:    called by DOS 3.1+ kernel
  957. SeeAlso: INT 21/AX=5F00h,5F01h,5F02h,5F03h,5F04h,5F05h,5F06h
  958. ---------------------------------------------
  959. INT 2F - Multiplex - NETWORK REDIRECTOR - PRINTER SETUP
  960.     AX = 111Fh
  961.     STACK: WORD function
  962.         5E02h  set printer setup
  963.         5E03h  get printer setup
  964.         5E04h  set printer mode
  965.         5E05h  get printer mode
  966. Return: CF set on error
  967.         AX = error code (see INT 21/AH=59h)
  968.     STACK unchanged
  969. Note:    called by DOS 3.1+ kernel
  970. SeeAlso: INT 21/AX=5E02h,5E03h,5E04h,5E05h
  971. ---------------------------------------------
  972. INT 2F - Multiplex - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  973.     AX = 1120h
  974.     DS = DOS CS
  975.     ???
  976. Return: CF clear (successful)
  977. Notes:    called by DOS 3.1+ kernel
  978.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  979. SeeAlso: INT 21/AH=0Dh, INT 21/AX=5D01h
  980. ---------------------------------------------
  981. INT 2F - Multiplex - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  982.     AX = 1121h
  983.     CX:DX = offset (in bytes) from end
  984.     ES:DI -> SFT
  985.     SS = DOS CS
  986. Return: CF set on error
  987.         AL = DOS error code (see INT 21/AH=59h)
  988.     CF clear if successful
  989.         DX:AX = new file position
  990. Note:    called by DOS 3.1+ kernel
  991. SeeAlso: AX=1228h, INT 21/AH=42h
  992. ---------------------------------------------
  993. INT 2F - Multiplex - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  994.     AX = 1122h
  995.     SS = DOS CS
  996.     ???
  997. Return: ???
  998. Note:    called by DOS 3.1+ kernel
  999. ---------------------------------------------
  1000. INT 2F - Multiplex - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  1001.     AX = 1123h
  1002.     DS:SI -> ASCIZ filename to canonicalize
  1003.     ES:DI -> 128-byte buffer for qualified name
  1004. Return: CF set if not resolved
  1005. Notes:    called by DOS 3.1+ kernel
  1006.     called first when DOS attempts to resolve a filename (unless inside an
  1007.       AX=5D00h server call); if this fails, DOS resolves the name locally
  1008. SeeAlso: AX=1221h, INT 21/AH=60h
  1009. ---------------------------------------------
  1010. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  1011.     AX = 1124h
  1012.     ES:DI -> SFT
  1013.     SS = DOS CS
  1014.     ???
  1015. Return: CX = ???
  1016. Note:    called by DOS 3.1+ kernel
  1017. ---------------------------------------------
  1018. INT 2F - Multiplex - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  1019.     AX = 1125h
  1020.     STACK: WORD subfunction
  1021.         5D07h get print stream state
  1022.             Return: DL = current state
  1023.         5D08h set print stream state
  1024.             DL = new state
  1025.         5D09h finish print job
  1026. Return: CF set on error
  1027.         AX = error code (see INT 21/AH=59h)
  1028.     STACK unchanged
  1029. Note:    called by DOS 3.1+ kernel
  1030. SeeAlso: INT 21/AX=5D07h,5D08h,5D09h
  1031. ---------------------------------------------
  1032. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  1033.     AX = 1126h
  1034.     ???
  1035. Return: CF set on error???
  1036. Note:    called by DOS 3.1+ kernel
  1037. ---------------------------------------------
  1038. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - UNUSED
  1039.     AX = 1127h
  1040. Return: CF set
  1041.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1042. ---------------------------------------------
  1043. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - UNUSED
  1044.     AX = 1128h
  1045. Return: CF set
  1046.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1047. ---------------------------------------------
  1048. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - UNUSED
  1049.     AX = 1129h
  1050. Return: CF set
  1051.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1052. ---------------------------------------------
  1053. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1054.     AX = 112Ah
  1055.     DS = DOS CS
  1056.     ???
  1057. Return: ???
  1058. Note:    does something to each IFS driver
  1059. ---------------------------------------------
  1060. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1061.     AX = 112Bh
  1062.     SS = DOS CS
  1063.     CX = ???
  1064.     DX = ???
  1065.     STACK: WORD low byte contains function???
  1066.         0Dh ???
  1067.     ???
  1068. Return: CF set on error
  1069.         AX = DOS error code (see INT 21/AH=59h)
  1070.     CF clear if successful
  1071. Note:    called by DOS 4.0 kernel
  1072. ---------------------------------------------
  1073. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1074.     AX = 112Ch
  1075.     SS = DOS CS
  1076.     SDA current SFT pointer -> SFT for file
  1077.     ???
  1078. Return: CF set on error
  1079. ---------------------------------------------
  1080. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1081.     AX = 112Dh
  1082.     BL = subfunction
  1083.         04h ???
  1084.         Return: CF clear
  1085.         else ???
  1086.         Return: CX = ??? (00h or 02h for DOS 4.01)
  1087.     SS = DOS CS
  1088. Return: DS = DOS CS
  1089. Note:    called by DOS 4.0 kernel
  1090. ---------------------------------------------
  1091. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1092.     AX = 112Eh
  1093.     SS = DS = DOS CS
  1094.     STACK: WORD ???   low byte = ???
  1095. Return: CF set on error
  1096.     CF clear if successful
  1097.         CX = ???
  1098. Note:    called by DOS 4.0 kernel
  1099. SeeAlso: AX=1115h
  1100. ---------------------------------------------
  1101. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - ???
  1102.     AX = 112Fh
  1103.     SS = DOS CS
  1104.     STACK: WORD function in low byte
  1105.         00h ???
  1106.             DS:SI -> Current Directory Structure???
  1107.             CL = drive (1=A:)
  1108.         01h ???
  1109.             DS:SI -> ???
  1110.             CL = file handle???
  1111.         02h ???
  1112.             DS:SI -> Current Directory Structure???
  1113.             DI = ???
  1114.             CX = drive (1=A:)
  1115.     ???
  1116. Return: CF set on error
  1117.         AX = DOS error code (see INT 21/AH=59h)
  1118.     CF clear if successful
  1119. Note:    called by DOS 4.0 kernel
  1120. SeeAlso: INT 21/AH=6Bh
  1121. ---------------------------------------------
  1122. INT 2F - Multiplex - DOS 4 IFSFUNC.EXE - GET IFSFUNC SEGMENT
  1123.     AX = 1130h
  1124. Return: ES = CS of resident IFSFUNC
  1125. ---------------------------------------------
  1126. INT 2F - Multiplex - DOS 3+ internal - INSTALLATION CHECK
  1127.     AX = 1200h
  1128. Return: AL = FFh (for compatibility with other INT 2F functions)
  1129. ---------------------------------------------
  1130. INT 2F - Multiplex - DOS 3+ internal - CLOSE CURRENT FILE
  1131.     AX = 1201h
  1132.     SS = DOS CS
  1133.     SDA current SFT pointer -> SFT of file to close
  1134. Return: BX???
  1135.     CX???
  1136.     ES:DI -> SFT for file
  1137. SeeAlso: AX=1106h,1227h, INT 21/AH=3Eh
  1138. ---------------------------------------------
  1139. INT 2F - Multiplex - DOS 3+ internal - GET INTERRUPT ADDRESS
  1140.     AX = 1202h
  1141.     STACK: WORD vector number
  1142. Return: ES:BX -> interrupt vector
  1143.     STACK unchanged
  1144. ---------------------------------------------
  1145. INT 2F - Multiplex - DOS 3+ internal - GET DOS DATA SEGMENT
  1146.     AX = 1203h
  1147. Return: DS = segment of IBMDOS
  1148. ---------------------------------------------
  1149. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  1150.     AX = 1204h
  1151.     STACK: WORD character to normalize
  1152. Return: AL = normalized character (forward slash turned to backslash, all
  1153.         others unchanged)
  1154.     ZF set if path separator
  1155.     STACK unchanged
  1156. ---------------------------------------------
  1157. INT 2F - Multiplex - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  1158.     AX = 1205h
  1159.     STACK: WORD character to output
  1160. Return: STACK unchanged
  1161. Note:    can be called only from within DOS
  1162. ---------------------------------------------
  1163. INT 2F - Multiplex - DOS 3+ internal - INVOKE CRITICAL ERROR
  1164.     AX = 1206h
  1165.     DI = error code
  1166.     BP:SI -> device driver header
  1167.     SS = DOS CS
  1168.     STACK: WORD value to be passed to INT 24 in AX
  1169. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  1170.     STACK unchanged
  1171. SeeAlso: INT 24
  1172. ---------------------------------------------
  1173. INT 2F - Multiplex - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  1174.     AX = 1207h
  1175.     DS:DI -> disk buffer
  1176. Return: buffer moved to end of buffer list (least-recently used is first)
  1177. Note:    can be called only from within DOS
  1178. SeeAlso: AX=120Fh
  1179. ---------------------------------------------
  1180. INT 2F - Multiplex - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  1181.     AX = 1208h
  1182.     ES:DI -> SFT
  1183. Return: AX = new value of reference count
  1184. Note:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  1185.       that the SFT is not in use)
  1186. ---------------------------------------------
  1187. INT 2F - Multiplex - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  1188.     AX = 1209h
  1189.     DS:DI -> disk buffer
  1190. Return: disk buffer marked unused, contents written to disk if buffer dirty
  1191. Note:    can be called only from within DOS
  1192. SeeAlso: AX=120Eh,1215h
  1193. ---------------------------------------------
  1194. INT 2F - Multiplex - DOS 3+ internal - ???
  1195.     AX = 120Ah
  1196.     ???
  1197.     STACK: WORD ???
  1198. Return: CF set on error
  1199.     AL = ???
  1200.     STACK unchanged
  1201. Note:    can be called only from within DOS
  1202. ---------------------------------------------
  1203. INT 2F - Multiplex - DOS 3+ internal - ???
  1204.     AX = 120Bh
  1205.     ES:DI -> system file table entry
  1206.     STACK: WORD ???
  1207. Return: CF set on error
  1208.         AX = error code (20h) (see AH=59h)
  1209.     CF clear if successful
  1210.     STACK unchanged
  1211. Note:    can be called only from within DOS, performs AX=120Ah routine if file
  1212.       opened via FCB or in compatibility mode with inheritance allowed
  1213. ---------------------------------------------
  1214. INT 2F - Multiplex - DOS 3+ internal - SET FCB FILE'S OWNER???
  1215.     AX = 120Ch
  1216.     SDA current SFT pointer -> SFT for file
  1217.     DS = SS = DOS CS
  1218. Return: ES, DI, AX destroyed
  1219. Note:    seems to change owner of last-accessed file to calling process
  1220. ---------------------------------------------
  1221. INT 2F - Multiplex - DOS 3+ internal - GET DATE AND TIME
  1222.     AX = 120Dh
  1223.     SS = DOS CS
  1224. Return: AX = current date in packed format (see INT 21/AX=5700h)
  1225.     DX = current time in packed format (see INT 21/AX=5700h)
  1226. SeeAlso: INT 21/AH=2Ah,2Ch
  1227. ---------------------------------------------
  1228. INT 2F - Multiplex - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  1229.     AX = 120Eh
  1230.     SS = DOS CS
  1231. Return: DS:DI -> first disk buffer
  1232. Note:    clears "referenced" flag on all disk buffers
  1233. SeeAlso: AX=1209h,1210h, INT 21/AH=0Dh
  1234. ---------------------------------------------
  1235. INT 2F - Multiplex - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  1236.     AX = 120Fh
  1237.     DS:DI -> disk buffer
  1238.     SS = DOS CS
  1239. Return: DS:DI -> next buffer in buffer list
  1240. Note:    indicated buffer moved to end of chain
  1241. SeeAlso: AX=1207h
  1242. ---------------------------------------------
  1243. INT 2F - Multiplex - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  1244.     AX = 1210h
  1245.     DS:DI -> first disk buffer to check
  1246. Return: ZF clear if found
  1247.         DS:DI -> first unreferenced disk buffer
  1248.     ZF set if not found
  1249. SeeAlso: AX=120Eh
  1250. ---------------------------------------------
  1251. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  1252.     AX = 1211h
  1253.     DS:SI -> ASCIZ filename to normalize
  1254.     ES:DI -> buffer for normalized filename
  1255. Return: destination buffer filled with uppercase filename, with slashes turned
  1256.     to backslashes
  1257. SeeAlso: AX=121Eh,1221h
  1258. ---------------------------------------------
  1259. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  1260.     AX = 1212h
  1261.     ES:DI -> ASCIZ string
  1262. Return: CX = length of string
  1263. SeeAlso: AX=1225h
  1264. ---------------------------------------------
  1265. INT 2F - Multiplex - DOS 3+ internal - UPPERCASE CHARACTER
  1266.     AX = 1213h
  1267.     STACK: WORD character to convert to uppercase
  1268. Return: AL = uppercase character
  1269.     STACK unchanged
  1270. ---------------------------------------------
  1271. INT 2F - Multiplex - DOS 3+ internal - COMPARE FAR POINTERS
  1272.     AX = 1214h
  1273.     DS:SI = first pointer
  1274.     ES:DI = second pointer
  1275. Return: ZF set if pointers are equal, ZF clear if not equal
  1276. ---------------------------------------------
  1277. INT 2F - Multiplex - DOS 3+ internal - FLUSH BUFFER
  1278.     AX = 1215h
  1279.     DS:DI -> disk buffer
  1280.     SS = DOS CS
  1281.     STACK: WORD drives for which to skip buffer
  1282.         ignore buffer if drive same as high byte, or bytes differ and
  1283.         the buffer is for a drive OTHER than that given in low byte
  1284. Return: STACK unchanged
  1285. Note:    can be called only from within DOS
  1286. SeeAlso: AX=1209h
  1287. ---------------------------------------------
  1288. INT 2F - Multiplex - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE
  1289.     AX = 1216h
  1290.     BX = system file table entry number
  1291. Return: CF clear if successful
  1292.         ES:DI -> system file table entry
  1293.     CF set if BX greater than FILES=
  1294. SeeAlso: AX=1220h
  1295. ---------------------------------------------
  1296. INT 2F - Multiplex - DOS 3+ internal - SET WORKING DRIVE
  1297.     AX = 1217h
  1298.     SS = DOS CS
  1299.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  1300. Return: CF set on error
  1301.         (drive > LASTDRIVE)
  1302.     CF clear if successful
  1303.         DS:SI -> current directory structure for specified drive
  1304.     STACK unchanged
  1305. SeeAlso: AX=1219h
  1306. ---------------------------------------------
  1307. INT 2F - Multiplex - DOS 3+ internal - GET CALLER'S REGISTERS
  1308.     AX = 1218h
  1309. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  1310. Note:    only valid while within DOS
  1311. ---------------------------------------------
  1312. INT 2F - Multiplex - DOS 3+ internal - SET DRIVE???
  1313.     AX = 1219h
  1314.     SS = DOS CS
  1315.     STACK: WORD drive (0 = default, 1 = A:, etc)
  1316. Return: ???
  1317.     STACK unchanged
  1318. Notes:    calls AX=1217h
  1319.     builds a current directory structure if inside server call
  1320.       (INT 21/AX=5D00h)
  1321. SeeAlso: AX=1217h,121Fh
  1322. ---------------------------------------------
  1323. INT 2F - Multiplex - DOS 3+ internal - GET FILE'S DRIVE
  1324.     AX = 121Ah
  1325.     DS:SI -> filename
  1326. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  1327. SeeAlso: INT 21/AH=19h,60h
  1328. ---------------------------------------------
  1329. INT 2F - Multiplex - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  1330.     AX = 121Bh
  1331.     CL = year - 1980
  1332. Return: AL = number of days in February
  1333. Note:    requires DS to be set to the DOS code segment
  1334. SeeAlso: INT 21/AH=2Bh
  1335. ---------------------------------------------
  1336. INT 2F - Multiplex - DOS 3+ internal - CHECKSUM MEMORY
  1337.     AX = 121Ch
  1338.     DS:SI -> start of memory to checksum
  1339.     CX = number of bytes
  1340.     DX = initial checksum
  1341.     SS = DOS CS
  1342. Return: AX, CX destroyed
  1343.     DX = checksum
  1344.     DS:SI -> first byte after checksummed range
  1345. SeeAlso: AX=121Dh
  1346. ---------------------------------------------
  1347. INT 2F - Multiplex - DOS 3+ internal - SUM MEMORY
  1348.     AX = 121Dh
  1349.     DS:SI -> memory to add up
  1350.     CX = 0000h
  1351.     DX = limit
  1352. Return: AL = byte which exceeded limit
  1353.     CX = number of bytes before limit exceeded
  1354.     DX = remainder after adding first CX bytes
  1355.     DS:SI -> byte beyond the one which exceeded the limit
  1356. SeeAlso: AX=121Ch
  1357. ---------------------------------------------
  1358. INT 2F - Multiplex - DOS 3+ internal - COMPARE FILENAMES
  1359.     AX = 121Eh
  1360.     DS:SI -> first ASCIZ filename
  1361.     ES:DI -> second ASCIZ filename
  1362. Return: ZF set if filenames equivalent, ZF clear if not
  1363. SeeAlso: AX=1211h,1221h
  1364. ---------------------------------------------
  1365. INT 2F - Multiplex - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  1366.     AX = 121Fh
  1367.     SS = DOS CS
  1368.     STACK: WORD drive letter
  1369. Return: ES:DI -> current directory structure (will be overwritten by next call)
  1370.     STACK unchanged
  1371. ---------------------------------------------
  1372. INT 2F - Multiplex - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  1373.     AX = 1220h
  1374.     BX = file handle
  1375. Return: CF set on error
  1376.         AL = 6 (invalid file handle)
  1377.     CF clear if successful
  1378.         ES:DI -> JFT entry for file handle in current process
  1379. Note:    the byte pointed at by ES:DI contains the number of the SFT for the
  1380.       file handle, or FFh if the handle is not open
  1381. SeeAlso: AX=1216h,1229h
  1382. ---------------------------------------------
  1383. INT 2F - Multiplex - DOS 3+ internal - CANONICALIZE FILE NAME
  1384.     AX = 1221h
  1385.     DS:SI -> file name to be fully qualified
  1386.     ES:DI -> 128-byte buffer for resulting canonical file name
  1387.     SS = DOS CS
  1388. Return: (see INT 21/AH=60h)
  1389. Note:    identical to INT 21/AH=60h
  1390. SeeAlso: AX=1123h, INT 21/AH=60h
  1391. ---------------------------------------------
  1392. INT 2F - Multiplex - DOS 3+ internal - SET EXTENDED ERROR INFO
  1393.     AX = 1222h
  1394.     SS = DOS data segment
  1395.     SS:SI -> 4-byte records
  1396.         BYTE    error code, FFh = last record
  1397.         BYTE    error class, FFh = don't change
  1398.         BYTE    suggested action, FFh = don't change
  1399.         BYTE    error locus, FFh = don't change
  1400.     SDA error code set
  1401. Return: SI destroyed
  1402.     SDA error class, error locus, and suggested action fields set
  1403. Note:    can be called only from within DOS
  1404. SeeAlso: AX=122Dh,INT 21/AH=59h
  1405. ---------------------------------------------
  1406. INT 2F - Multiplex - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  1407.     AX = 1223h
  1408.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  1409.     SDA+22Bh (DOS 4.0x) = eight-character blank-padded name
  1410. Return: CF set if no character device by that name found
  1411.     CF clear if found
  1412.         BH = low byte of device attribute word
  1413. Note:    can only be called from within DOS (assumes DS=SS=DOS CS)
  1414. SeeAlso: INT 21/AX=5D06h,5D0Bh
  1415. ---------------------------------------------
  1416. INT 2F - Multiplex - DOS 3+ internal - DELAY
  1417.     AX = 1224h
  1418.     SS = DOS CS
  1419. Return: after delay set by INT 21/AX=440Bh, unless in server call
  1420.       (INT 21/AX=5D00h)
  1421. Note:    delay is dependent on the processor speed, and is skipped entirely if
  1422.       inside a server call
  1423. SeeAlso: INT 21/AX=440Bh, INT 21/AH=52h
  1424. ---------------------------------------------
  1425. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  1426.     AX = 1225h
  1427.     DS:SI -> ASCIZ string
  1428. Return: CX = length of string
  1429. SeeAlso: AX=1212h
  1430. ---------------------------------------------
  1431. INT 2F - Multiplex - DOS 3.3+ internal - OPEN FILE
  1432.     AX = 1226h
  1433.     CL = access mode
  1434.     DS:DX -> ASCIZ filename
  1435. Return: CF set on error
  1436.         AL = error code (see INT 21/AH=59h)
  1437.     CF clear if successful
  1438.         AX = file handle
  1439. Notes:    can only be called from within DOS (assumes SS=DOS CS)
  1440.     equivalent to INT 21/AH=3Dh    
  1441. SeeAlso: AX=1227h,INT 21/AH=3Dh
  1442. ---------------------------------------------
  1443. INT 2F - Multiplex - DOS 3.3+ internal - CLOSE FILE
  1444.     AX = 1227h
  1445.     BX = file handle
  1446. Return: CF set on error
  1447.         AL = 06h invalid file handle
  1448.     CF clear if successful
  1449. Notes:    can only be called from within DOS (assumes SS=DOS CS)
  1450.     equivalent to INT 21/AH=3Eh
  1451. SeeAlso: AX=1106h,1201h,1226h, INT 21/AH=3Eh
  1452. ---------------------------------------------
  1453. INT 2F - Multiplex - DOS 3.3+ internal - MOVE FILE POINTER
  1454.     AX = 1228h
  1455.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  1456.     BX = file handle
  1457.     CX:DX = offset in bytes
  1458.     SS = DOS CS
  1459. Return: as for INT 21/AH=42h
  1460. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  1461.       function call
  1462.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  1463.       LSEEK, and restores frame pointer
  1464. SeeAlso: INT 21/AH=42h
  1465. ---------------------------------------------
  1466. INT 2F - Multiplex - DOS 3.3+ internal - READ FROM FILE
  1467.     AX = 1229h
  1468.     BX = file handle
  1469.     CX = number of bytes to read
  1470.     DS:DX -> buffer
  1471.     SS = DOS CS
  1472. Return: as for INT 21/AH=3Fh
  1473. Note:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  1474.       a DOS function call
  1475. SeeAlso: AX=1226h,INT 21/AH=3Fh
  1476. ---------------------------------------------
  1477. INT 2F - Multiplex - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  1478.     AX = 122Ah
  1479.     BX = entry point to set (0001h or 0002h)
  1480.     DS:SI -> FASTOPEN entry point
  1481.         (entry point not set if SI = FFFFh for DOS 4+)
  1482. Return: CF set if specified entry point already set
  1483. Notes:    entry point in BX is ignored under DOS 3.30
  1484.     both entry points set to same handler by DOS 4.01
  1485.  
  1486. DOS 3.30 FASTOPEN is called with:
  1487.     AL = 01h  ???
  1488.         CX = ??? seems to be offset
  1489.         DI = ??? seems to be offset
  1490.         SI = offset in DOS CS of filename
  1491.     AL = 02h  ???
  1492.     AL = 03h  open file???
  1493.         SI = offset in DOS CS of filename
  1494.     AL = 04h  ???
  1495.         AH = subfunction (00h,01h,02h)
  1496.         ES:DI -> ???
  1497.         CX = ??? (subfunctions 01h and 02h only)
  1498. Returns: CF set on error or not installed
  1499. Note: function 03h calls function 01h first
  1500.  
  1501. PCDOS 4.01 FASTOPEN is additionally called with:
  1502.     AL = 04h ???
  1503.         AH = 03h
  1504.         ???
  1505.     AL = 05h ???
  1506.     AL = 0Bh ???
  1507.     AL = 0Ch ???
  1508.     AL = 0Dh ???
  1509.     AL = 0Eh ???
  1510.     AL = 0Fh ???
  1511.     AL = 10h ???
  1512. ---------------------------------------------
  1513. INT 2F - Multiplex - DOS 3.3+ internal - IOCTL
  1514.     AX = 122Bh
  1515.     BP = 44xxh
  1516.     SS = DOS CS
  1517.     additional registers as appropriate for INT 21/AX=44xxh
  1518. Return: as for INT 21/AH=44h
  1519. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  1520.       a DOS function call
  1521.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  1522.       IOCTL, and restores frame pointer
  1523. SeeAlso: INT 21/AH=44h
  1524. ---------------------------------------------
  1525. INT 2F - Multiplex - DOS 3.3+ internal - GET DEVICE CHAIN
  1526.     AX = 122Ch
  1527. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  1528. SeeAlso: INT 21/AH=52h
  1529. ---------------------------------------------
  1530. INT 2F - Multiplex - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  1531.     AX = 122Dh
  1532. Return: AX = current extended error code
  1533. SeeAlso: AX=1222h,INT 21/AH=59h
  1534. ---------------------------------------------
  1535. INT 2F - Multiplex - DOS 4.00 internal - GET OR SET ERROR TABLE ADDRESSES
  1536.     AX = 122Eh
  1537.     DL = subfunction
  1538.         00h get standard DOS error table (errors 00h-12h,50h-5Bh)
  1539.         Return: ES:DI -> error table
  1540.         01h set standard DOS error table
  1541.         ES:DI -> error table
  1542.         02h get parameter error table (errors 00h-0Ah)
  1543.         Return: ES:DI -> error table
  1544.         03h set parameter error table
  1545.         ES:DI -> error table
  1546.         04h get critical/SHARE error table (errors 13h-2Bh)
  1547.         Return: ES:DI -> error table
  1548.         05h set critical/SHARE error table
  1549.         ES:DI -> error table
  1550.         06h get ??? error table
  1551.         Return: ES:DI -> error table
  1552.         07h set ??? error table
  1553.         ES:DI -> error table
  1554.         08h get ??? error table
  1555.         Return: ES:DI -> error table
  1556.         09h set ??? error table
  1557.         ES:DI -> error table
  1558. SeeAlso: INT 21/AH=59h
  1559.  
  1560. Format of error table:
  1561. Offset    Size    Description
  1562.  00h    BYTE    FFh
  1563.  01h  2 BYTEs    04h,00h (DOS version???)
  1564.  03h    BYTE    number of error headers following
  1565.  04h 2N WORDs    table of all error headers for table
  1566.         Offset    Size    Description
  1567.          00h    WORD    error message number
  1568.          02h    WORD    offset of error message from start of header
  1569.                 error messages are count byte followed by msg
  1570. ---------------------------------------------
  1571. INT 2F - Multiplex - DOS 4.0 internal - SET ???
  1572.     AX = 122Fh
  1573.     DX = ???
  1574. ---------------------------------------------
  1575. INT 2F - Multiplex - DOS 3.3+ - SET DISK INTERRUPT HANDLER
  1576.     AH = 13h
  1577.     DS:DX -> interrupt handler disk driver calls on read/write
  1578.     ES:BX = address to restore INT 13 to on system halt (exit from root
  1579.          shell)
  1580. Return: DS:DX from previous invocation of this function
  1581.     ES:BX from previous invocation of this function
  1582. Notes:    most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  1583.       functions are still invoked via an INT 13 instruction
  1584.     this is a dangerous security loophole for any virus-monitoring software
  1585.       which does not trap this call (at least two viruses are known to use
  1586.       it to get the original ROM entry point)
  1587. ---------------------------------------------
  1588. INT 2F - Multiplex - NLSFUNC.COM - INSTALLATION CHECK
  1589.     AX = 1400h
  1590. Return: AL = 00h not installed, OK to install
  1591.          01h not installed, not OK
  1592.          FFh installed
  1593. Note:    called by DOS v3.3+ kernel
  1594. ---------------------------------------------
  1595. INT 2F - Multiplex - NLSFUNC.COM - CHANGE CODE PAGE
  1596.     AX = 1401h
  1597.     DS:SI -> internal code page structure (see below)
  1598.     BX = new code page
  1599.     DX = country code???
  1600. Return: AL = status
  1601.          00h successful
  1602.          else DOS error code
  1603. Note:    called by DOS v3.3+ kernel
  1604. SeeAlso: INT 21/AH=66h
  1605.  
  1606. Format of DOS 3.30 internal code page structure:
  1607. Offset    Size    Description
  1608.  00h  8 BYTEs    ???
  1609.  08h 64 BYTEs    name of country information file
  1610.  48h    WORD    system code page
  1611.  4Ah    WORD    number of supported subfunctions
  1612.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  1613.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  1614.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  1615.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  1616.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  1617. ---------------------------------------------
  1618. INT 2F - Multiplex - NLSFUNC.COM - GET COUNTRY INFO
  1619.     AX = 1402h
  1620.     BP = subfunction (same as AL for INT 21/AH=65h)
  1621.     BX = code page
  1622.     DX = country code
  1623.     DS:SI -> internal code page structure (see AX=1401h)
  1624.     ES:DI -> user buffer
  1625.     CX = size of user buffer
  1626. Return: AL = status
  1627.         00h successful
  1628.         else DOS error code
  1629. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  1630.     code page structure apparently only needed for COUNTRY.SYS pathname
  1631. SeeAlso: AX=1403h,1404h, INT 21/AH=65h
  1632. ---------------------------------------------
  1633. INT 2F - Multiplex - NLSFUNC.COM - SET COUNTRY INFO
  1634.     AX = 1403h
  1635.     DS:SI -> internal code page structure (see AX=1401h)
  1636.     BX = code page
  1637.     DX = country code
  1638. Return: AL = status 
  1639.          ???
  1640. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  1641. SeeAlso: AX=1402h,1404h, INT 21/AH=38h"SET"
  1642. ---------------------------------------------
  1643. INT 2F - Multiplex - NLSFUNC.COM - GET COUNTRY INFO
  1644.     AX = 1404h
  1645.     BX = code page
  1646.     DX = country code
  1647.     DS:SI -> internal code page structure (see AX=1401h)
  1648.     ES:DI -> user buffer
  1649. Return: AL = status
  1650.          ???
  1651. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  1652.     code page structure apparently only needed for COUNTRY.SYS pathname
  1653. SeeAlso: AX=1402h,1403h, INT 21/AH=38h"GET"
  1654. ---------------------------------------------
  1655. INT 2F - Multiplex - CDROM - INSTALLATION CHECK
  1656.     AX = 1500h
  1657.     BX = 0000h
  1658. Return: BX = number of CDROM drive letters used
  1659.     CX = starting drive letter (0=A:)
  1660. Note:    this installation check DOES NOT follow the format used by other
  1661.       software
  1662. ---------------------------------------------
  1663. INT 2F - Multiplex - DOS 4+ GRAPHICS.COM - INSTALLATION CHECK
  1664.     AX = 1500h
  1665. Return: AX = FFFFh
  1666.     ES:DI -> ??? (graphics data?)
  1667. ---------------------------------------------
  1668. INT 2F - Multiplex - CDROM - GET DRIVE DEVICE LIST
  1669.     AX = 1501h
  1670.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  1671. Return: buffer filled, for each drive letter
  1672.       BYTE    subunit number in driver
  1673.       DWORD address of device driver header
  1674. ---------------------------------------------
  1675. INT 2F - Multiplex - CDROM - GET COPYRIGHT FILE NAME
  1676.     AX = 1502h
  1677.     ES:BX -> 38-byte buffer for name of copyright file
  1678.     CX = drive number (0=A:)
  1679. Return: CF set if drive is not a CDROM drive
  1680.         AX = 15 (invalid drive)
  1681.     CF clear if successful
  1682. SeeAlso: AX=1503h
  1683. ---------------------------------------------
  1684. INT 2F - Multiplex - CDROM - GET ABSTRACT FILE NAME
  1685.     AX = 1503h
  1686.     ES:BX -> 38-byte buffer for name of abstract file
  1687.     CX = drive number (0=A:)
  1688. Return: CF set if drive is not a CDROM drive
  1689.         AX = 15 (invalid drive)
  1690.     CF clear if successful
  1691. SeeAlso: AX=1502h
  1692. ---------------------------------------------
  1693. INT 2F - Multiplex - CDROM - GET BIBLIOGRAPHIC DOC FILE NAME
  1694.     AX = 1504h
  1695.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  1696.     CX = drive number (0=A:)
  1697. Return: CF set if drive is not a CDROM drive
  1698.         AX = 15 (invalid drive)
  1699.     CF clear if successful
  1700. ---------------------------------------------
  1701. INT 2F - Multiplex - CDROM - READ VTOC
  1702.     AX = 1505h
  1703.     ES:BX -> 2048-byte buffer
  1704.     CX = drive number (0=A:)
  1705.     DX = sector index (0=first volume descriptor,1=second,...)
  1706. Return: CF set on error
  1707.         AX = error code (15=invalid drive,21=not ready)
  1708.     CF clear if successful
  1709.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  1710. ---------------------------------------------
  1711. INT 2F - Multiplex - CDROM - TURN DEBUGGING ON
  1712.     AX = 1506h
  1713.     BX = debugging function to enable
  1714. Note:    reserved for development
  1715. SeeAlso: AX=1507h
  1716. ---------------------------------------------
  1717. INT 2F - Multiplex - CDROM - TURN DEBUGGING OFF
  1718.     AX = 1507h
  1719.     BX = debugging function to disable
  1720. Note:    reserved for development
  1721. SeeAlso: AX=1506h
  1722. ---------------------------------------------
  1723. INT 2F - Multiplex - CDROM - ABSOLUTE DISK READ
  1724.     AX = 1508h
  1725.     ES:BX -> buffer
  1726.     CX = drive number (0=A:)
  1727.     SI:DI = starting sector number
  1728.     DX = number of sectors to read
  1729. Return: CF set on error
  1730.         AL = error code (15=invalid drive,21=not ready)
  1731.     CF clear if successful
  1732. SeeAlso: AX=1509h
  1733. ---------------------------------------------
  1734. INT 2F - Multiplex - CDROM - ABSOLUTE DISK WRITE
  1735.     AX = 1509h
  1736.     ES:BX -> buffer
  1737.     CX = drive number (0=A:)
  1738.     SI:DI = starting sector number
  1739.     DX = number of sectors to write
  1740. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  1741. SeeAlso: AX=1508h
  1742. ---------------------------------------------
  1743. INT 2F - Multiplex - CDROM - RESERVED
  1744.     AX = 150Ah
  1745. ---------------------------------------------
  1746. INT 2F - Multiplex - CDROM 2.00 - DRIVE CHECK
  1747.     AX = 150Bh
  1748.     CX = drive number (0=A:)
  1749. Return: BX = ADADh if MSCDEX.EXE installed
  1750.         AX = 0000h if drive not supported
  1751.         nonzero if supported
  1752. SeeAlso: AX=150Dh
  1753. ---------------------------------------------
  1754. INT 2F - Multiplex - CDROM 2.00 - GET MSCDEX.EXE VERSION
  1755.     AX = 150Ch
  1756. Return: BH = major version
  1757.     BL = minor version
  1758. Note:    MSCDEX.EXE versions prior to 1.02 return BX=0
  1759. ---------------------------------------------
  1760. INT 2F - Multiplex - CDROM 2.00 - GET CDROM DRIVE LETTERS
  1761.     AX = 150Dh
  1762.     ES:BX -> buffer for drive letter list (1 byte per drive)
  1763. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  1764.     to the drive in the same position for function 1501h
  1765. SeeAlso: AX=150Bh
  1766. ---------------------------------------------
  1767. INT 2F - Multiplex - CDROM 2.00 - GET/SET VOLUME DESCRIPTOR PREFERENCE
  1768.     AX = 150Eh
  1769.     BX = subfunction
  1770.         00h get preference
  1771.         DX = 0000h
  1772.         Return: DX = preference settings
  1773.         01h set preference
  1774.         DH = volume descriptor preference
  1775.             01h = primary volume descriptor
  1776.             02h = supplementary volume descriptor
  1777.         DL = supplementary volume descriptor preference
  1778.             01h = shift-Kanji
  1779.     CX = drive number (0=A:)
  1780. Return: CF set on error
  1781.         AX = error code (15=invalid drive,1=invalid function)
  1782.     CF clear if successful
  1783. ---------------------------------------------
  1784. INT 2F - Multiplex - CDROM 2.00 - GET DIRECTORY ENTRY
  1785.     AX = 150Fh
  1786.     CX = drive number (0=A:)
  1787.     ES:BX -> ASCIZ path name
  1788.     SI:DI -> 255-byte buffer for directory entry
  1789. Return: CF set on error
  1790.         AX = error code
  1791.     CF clear if succesful
  1792.         AX = disk format (0=High Sierra,1=ISO 9660)
  1793.  
  1794. Format of directory entry:
  1795. Offset    Size    Description
  1796.  00h    BYTE  length of directory entry
  1797.  01h    BYTE  length of XAR in LBN's (don't ask me what that means...)
  1798.  02h    DWORD LBN of data, Intel (little-endian) format
  1799.  06h    DWORD LBN of data, Motorola (big-endian) format
  1800.  0Ah    DWORD length of file, Intal format
  1801.  0Eh    DWORD length of file, Motorola format
  1802. ---High Sierra---
  1803.  12h  6 BYTEs date and time
  1804.  18h    BYTE  bit flags
  1805.  19h    BYTE  reserved
  1806. ---ISO 9660---
  1807.  12h  7 BYTEs date and time
  1808.  19h    BYTE  bit flags
  1809. ---both formats---
  1810.  1Ah    BYTE  interleave size
  1811.  1Bh    BYTE  interleave skip factor
  1812.  1Ch    WORD  volume set sequence number, Intel format
  1813.  1Eh    WORD  volume set sequence number, Motorola format
  1814.  20h    BYTE  length of file name
  1815.  21h  N BYTEs file name
  1816.     BYTE (optional) padding if filename is odd length
  1817.       N BYTEs system data
  1818. ---------------------------------------------
  1819. INT 2F - Multiplex - CDROM 2.10 - SEND DEVICE DRIVER REQUEST
  1820.     AX = 1510h
  1821.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  1822.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  1823. ---------------------------------------------
  1824. INT 2F - Multiplex - MS WINDOWS - ENHANCED WINDOWS INSTALLATION CHECK
  1825.     AX = 1600h
  1826. Return: AL = 00h if Enhanced Windows 3.x or Windows/386 2.x not running
  1827.     AL = 80h if Enhanced Windows 3.x or Windows/386 2.x not running
  1828.     AL = 01h if Windows/386 2.x running
  1829.     AL = FFh if Windows/386 2.x running
  1830.     AL = anything else
  1831.         AL = Windows major version number >= 3
  1832.         AH = Windows minor version number
  1833. Note:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  1834.       drivers, TSRs, and applications) to cooperate with multitasking
  1835.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  1836.     certain calls are also supported in the Microsoft 80286 DOS extender in
  1837.       Windows standard mode
  1838. SeeAlso: AX=4680h
  1839. ---------------------------------------------
  1840. INT 2Fh - Multiplex - MS WINDOWS/386 2.x - GET API ENTRY POINT
  1841.     AX = 1602h
  1842. Return: ES:DI -> Windows/386 2.x API procedure entry point
  1843. Notes:    this interface is supported in Windows 3.x only for compatibility
  1844.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  1845.         AX = 0000h
  1846.         ES:DI -> return address
  1847.         JUMP to address returned from INT 2F/AX=1602h
  1848.     After JUMP, at return address:
  1849.         VX??? = current VM ID.
  1850. ---------------------------------------------
  1851. INT 2Fh - Multiplex - MS WINDOWS - ENHANCED WINDOWS & 286 DOSX INIT BROADCAST
  1852.     AX = 1605h
  1853.     ES:BX = 0000h:0000h
  1854.     DS:SI = 0000h:0000h
  1855.     CX = 0000h
  1856.     DX = flags
  1857.         bit 0 = 0 if enhanced Windows initialization
  1858.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  1859.         bits 1-15 reserved (undefined)
  1860. Return: CX = 0000h if okay for Windows to load
  1861.         CX <> 0 if Windows should not load
  1862. Note:    the enhanced Windows loader and Microsoft 286 DOS extender will
  1863.       broadcast an INT 2F/AX=1605h call when initializing.  Any DOS device
  1864.       driver or TSR can watch for this broadcast and return the appropriate
  1865.       values.  If the driver or TSR returns CX <> 0, it is also its
  1866.       responsibility to display an error message.
  1867. ---------------------------------------------
  1868. INT 2Fh - Multiplex - MS WINDOWS - ENHANCED WINDOWS & 286 DOSX EXIT BROADCAST
  1869.     AX = 1606h
  1870.     DX = flags
  1871.             bit 0 = 0 if enhanced Windows exit
  1872.             bit 0 = 1 if Microsoft 286 DOS extender exit
  1873.         bits 1-15 reserved (undefined)
  1874. Return: CX = 0000h if okay for Windows to load
  1875.     CX <> 0 if Windows should not load
  1876. Note:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  1877.       broadcast will be issued immediately.
  1878. ---------------------------------------------
  1879. INT 2Fh - Multiplex - MS WINDOWS - VIRTUAL DEVICE CALL OUT API
  1880.     AX = 1607h
  1881.     BX = virtual device ID (see INT 2Fh AX=1684h)
  1882. Note:    more of a convention than an API, this call specifies a standard
  1883.       mechanism for enhanced Windows virtual devices (VxD's) to talk to DOS
  1884.       device drivers and TSRs
  1885. ---------------------------------------------
  1886. INT 2Fh - Multiplex - MS WINDOWS - ENHANCED WINDOWS INIT COMPLETE BROADCAST
  1887.     AX = 1608h
  1888. ---------------------------------------------
  1889. INT 2Fh - Multiplex - MS WINDOWS - ENHANCED WINDOWS BEGIN EXIT BROADCAST
  1890.     AX = 1609h
  1891. ---------------------------------------------
  1892. INT 2Fh - Multiplex - MS WINDOWS - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  1893.     AX = 1680h
  1894. Return: AL = 00h if the call is supported
  1895.     AL = 80h (unchanged) if the call is not supported
  1896. Notes:    programs can use this function, even when not running under Windows in
  1897.       386 enhanced mode, because OS/2 can use the call to detect idleness
  1898.       even though it does not support the complete enhanced Windows API. 
  1899.     this call will be supported in OS/2 2.0 for multitasking DOS
  1900.       applications
  1901.     does not block the program; it just gives up the remainder of the time
  1902.       slice
  1903. ---------------------------------------------
  1904. INT 2Fh - Multiplex - MS WINDOWS 3+ - BEGIN CRITICAL SECTION
  1905.     AX = 1681h
  1906. Notes:    used to prevent a task switch from occurring
  1907.     should be followed by an INT 2F/AX=1682h call as soon as possible
  1908.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  1909.       and increment by hand.
  1910. SeeAlso: AX=1682h, INT 21/AH=34h
  1911. ---------------------------------------------
  1912. INT 2Fh - Multiplex - MS WINDOWS 3+ - END CRITICAL SECTION
  1913.     AX = 1682h
  1914. Note:    not supported in Windows/386 2.x.  Get INDOS flag with INT 21/AH=34h
  1915.       and decrement by hand.
  1916. SeeAlso: AX=1681h, INT 21/AH=34h
  1917. ---------------------------------------------
  1918. INT 2Fh - Multiplex - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID
  1919.     AX = 1683h
  1920. Return: BX = current virtual machine (VM) ID
  1921. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  1922.     VM IDs are reused when VMs are destroyed
  1923.     an ID of 0 will never be returned
  1924. SeeAlso: AX=1684h, AX=1685h
  1925. ---------------------------------------------
  1926. INT 2F - Multiplex - MS WINDOWS - GET DEVICE API ENTRY POINT
  1927.     AX = 1684h
  1928.     BX = virtual device (VxD) ID (see below)
  1929.     ES:DI = 0000h:0000h
  1930. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  1931. Note:    some enhanced Windows virtual devices provide services that
  1932.       applications can access.  For example, the Virtual Display Device
  1933.       (VDD) provides an API used in turn by WINOLDAP.
  1934. SeeAlso: AX=1683h
  1935.  
  1936. Values for VxD ID:
  1937.  01h    VMM        Virtual Machine Manager
  1938.  02h    Debug
  1939.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  1940.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  1941.  05h    VTD        Virtual Timer Device
  1942.  06h    V86MMGR        Virtual 8086 Mode Device
  1943.  07h    PAGESWAP    Paging Device
  1944.  08h    Parity
  1945.  09h    Reboot
  1946.  0Ah    VDD        Virtual Display Device (GRABBER)
  1947.  0Bh    VSD        Virtual Sound Device
  1948.  0Ch    VMD        Virtual Mouse Device
  1949.  0Dh    VKD        Virtual Keyboard Device
  1950.  0Eh    VCD        Virtual COMM Device
  1951.  0Fh    VPD        Virtual Printer Device
  1952.  10h    VHD        Virtual Hard Disk Device
  1953.  11h    VMCPD
  1954.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  1955.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  1956.  14h    VNETBIOS    Virtual NetBIOS Device
  1957.  15h    DOSMGR
  1958.  16h    WINLOAD
  1959.  17h    SHELL
  1960.  18h    VMPoll
  1961.  19h    VPROD
  1962.  1Ah    DOSNET        assures network integrity across VMs
  1963.  1Bh    VFD        Virtual Floppy Device
  1964.  1Ch    VDD2        Secondary display adapter
  1965.  1Dh    WINDEBUG
  1966.  1Eh    TSRLoad        TSR instance utility
  1967. Note:   The high bit of the VxD ID is reserved for future use. The
  1968.         next 10 bits are the OEM # which is assigned by Microsoft. The
  1969.         low 5 bits are the device number. 
  1970. ---------------------------------------------
  1971. INT 2F - Multiplex - MS WINDOWS - SWITCH VMs AND CALLBACK
  1972.     AX = 1685h
  1973.     BX = VM ID of virtual machine to switch to
  1974.     CX = flags
  1975.         bit 0 wait until interrupts enabled
  1976.         bit 1 wait until critical section unowned
  1977.         bits 2-15 reserved (zero)
  1978.     DX:SI = priority boost (see VMM.INC)
  1979.     ES:DI -> FAR procedure to callback
  1980. Return: CF set on error
  1981.         AX = error code
  1982.         01h invalid VM ID
  1983.         02h invalid priority boost
  1984.         03h invalid flags
  1985.     CF clear if successful
  1986.         event will be or has been called
  1987. Note:    some DOS devices, such as networks, need to call functions in a
  1988.       specific VM. This call forces the appropriate VM to be installed.
  1989. SeeAlso: AX=1683h, INT 15/AX=1117h
  1990. ---------------------------------------------
  1991. INT 2F - Multiplex - DOS Protected-Mode Interface - DETECT MODE
  1992.     AX = 1686h
  1993. Return: AX = 0000h if operating in protected mode under DPMI
  1994.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  1995. SeeAlso: AX=1687h
  1996. ---------------------------------------------
  1997. INT 2F - Multiplex - DOS Protected-Mode Interface - INSTALLATION CHECK
  1998.     AX = 1687h
  1999. Return: AX = 0000h if installed
  2000.         BX = flags
  2001.         bit 0: 32-bit programs supported
  2002.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  2003.         DH = DPMI major version
  2004.         DL = DPMI minor version
  2005.         SI = number of paragraphs of DOS extender private data
  2006.         ES:DI -> DPMI mode-switch entry point
  2007. SeeAlso: AX=1686h
  2008.  
  2009. Call mode switch entry point with:
  2010.     AX = flags
  2011.         bit 0: set if 32-bit program
  2012.     ES = real mode segment of buffer for DPMI private data (ignored if
  2013.         SI was zero)
  2014. Return: CF set on error
  2015.         program still in real mode
  2016.     CF clear if successful
  2017.         CS = 16-bit selector corresponding to real-mode CS
  2018.         SS = selector corresponding to real-mode SS (64K limit)
  2019.         DS = selector corresponding to real-mode DS (64K limit)
  2020.         ES = selector to program's PSP (100h byte limit)
  2021.         FS = GS = 0
  2022.         high word of ESP = 0 if 32-bit program
  2023.         program now in protected mode
  2024. ---------------------------------------------
  2025. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION
  2026.     AX = 1700h
  2027. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  2028.     AX <> 1700h
  2029.         AL = WINOLDAP major version
  2030.         AH = WINOLDAP minor version
  2031. Notes:    WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  2032.       "old" (character-mode) application access to Dynamic Data Exchange,
  2033.       menus, and the Windows clipboard.
  2034.     this installation check DOES NOT follow the format used by other
  2035.       software
  2036. ---------------------------------------------
  2037. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD
  2038.     AX = 1701h
  2039. Return:    AX <> 0  success
  2040.     AX = 0     clipboard is already open
  2041. ---------------------------------------------
  2042. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD
  2043.     AX = 1702h
  2044. Return: AX <> 0  clipboard has been emptied
  2045.     AX = 0     failure
  2046. ---------------------------------------------
  2047. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA
  2048.     AX = 1703h
  2049.     DX = clipboard format supported by WinOldAp:
  2050.         01h text
  2051.         02h bitmap
  2052.         03h metafile picture
  2053.         04h SYLK
  2054.         05h DIF
  2055.         06h TIFF
  2056.         07h OEM text
  2057.     ES:BX -> data (see below for formats)
  2058.     SI:CX = size of data
  2059. Return: AX <> 0 data copied into the Clipboard
  2060.     AX = 0 failure
  2061.  
  2062. Format of bitmap:
  2063. Offset    Size    Description
  2064.  00h    WORD    type (0000h)
  2065.  02h    WORD    width of bitmap in pixels
  2066.  04h    WORD    height of bitmap in pixels
  2067.  06h    WORD    bytes per line
  2068.  08h    BYTE    number of color planes
  2069.  09h    BYTE    number of adjacent color bits in pixel
  2070.  0Ah    DWORD    pointer to start of data
  2071.  0Eh    WORD    width in 0.1mm units
  2072.  10h    WORD    height in 0.1mm units
  2073.  12h  N BYTEs    bitmap data
  2074.  
  2075. Format of metafile picture:
  2076. Offset    Size    Description
  2077.  00h    WORD    mapping mode
  2078.  02h    WORD    X extent
  2079.  04h    WORD    Y extent
  2080.  06h    WORD    picture data
  2081. ---------------------------------------------
  2082. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE
  2083.     AX = 1704h
  2084.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  2085. Return:  DX:AX = size of data in bytes, including any headers
  2086. Failure: DX:AX = 0  no data in this format in the Clipboard
  2087. ---------------------------------------------
  2088. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA
  2089.     AX = 1705h
  2090.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  2091.     ES:BX -> buffer
  2092. Return: AX <> 0  success
  2093.     AX = 0     error, or no data in this format in Clipboard
  2094. ---------------------------------------------
  2095. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - CloseClipboard
  2096.     AX = 1708h
  2097. Return: AX <> 0 success
  2098.     AX = 0 failure
  2099. ---------------------------------------------
  2100. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD
  2101.     AX = 1709h
  2102.     SI:CX = desired size in bytes
  2103. Return: DX:AX = number of bytes in largest block of free memory
  2104. Note:    WinOldAp is responsible for including the size of any headers
  2105. ---------------------------------------------
  2106. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES
  2107.     AX = 170Ah
  2108.     DX = GDI information index
  2109.         00h device driver version
  2110.         02h device classification
  2111.         04h width in mm
  2112.         06h height in mm
  2113.         08h width in pixels
  2114.         0Ah height in pixels
  2115.         0Ch bits per pixel
  2116.         0Eh number of bit planes
  2117.         10h number of brushes supported by device
  2118.         12h number of pens supported by device
  2119.         14h number of markers supported by device
  2120.         16h number of fonts supported by device
  2121.         18h number of colors
  2122.         1Ah size required for device descriptor
  2123.         1Ch curve capabilities
  2124.         1Eh line capabilities
  2125.         20h polygon capabilities
  2126.         22h text capabilities
  2127.         24h clipping capabilities
  2128.         26h bitblt capabilities
  2129.         28h X aspect
  2130.         2Ah Y aspect
  2131.         2Ch length of hypotenuse of aspect
  2132.         58h logical pixels per inch of width
  2133.         5Ah logical pixels per inch of height
  2134. Return:  AX = integer value of the desired item
  2135.         device classification
  2136.             00h vector plotter
  2137.             01h raster display
  2138.             02h raster printer
  2139.             03h raster camera
  2140.             04h character-stream, PLP
  2141.             05h Metafile, VDM
  2142.             06h display-file
  2143.         curve capabilities
  2144.             bit 0  circles
  2145.             bit 1  pie wedges
  2146.             bit 2  chord arcs
  2147.             bit 3  ellipses
  2148.             bit 4  wide lines
  2149.             bit 5  styled lines
  2150.             bit 6  wide styled lines
  2151.             bit 7  interiors
  2152.         line capabilities
  2153.             bit 1  polylines
  2154.             bit 2  markers
  2155.             bit 3  polymarkers
  2156.             bit 4  wide lines
  2157.             bit 5  styled lines
  2158.             bit 6  wide styled lines
  2159.             bit 7  interiors
  2160.         polygon capabilities
  2161.             bit 0  polygons
  2162.             bit 1  rectangles
  2163.             bit 2  trapezoids
  2164.             bit 3  scanlines
  2165.             bit 4  wide borders
  2166.             bit 5  styled borders
  2167.             bit 6  wide styled borders
  2168.             bit 7  interiors
  2169.         text capabilities
  2170.             bit 0  output precision character
  2171.             bit 1  output precision stroke
  2172.             bit 2  clippping precision stroke
  2173.             bit 3  90-degree character rotation
  2174.             bit 4  arbitrary character rotation
  2175.             bit 5  independent X and Y scaling
  2176.             bit 6  double-size
  2177.             bit 7  integer scaling
  2178.             bit 8  continuous scaling
  2179.             bit 9  bold
  2180.             bit 10 italic
  2181.             bit 11 underline
  2182.             bit 12 strikeout
  2183.             bit 13 raster fonts
  2184.             bit 14 vector fonts
  2185.             bit 15 reserved
  2186.         clipping capabilities
  2187.             00h none
  2188.             01h clipping to rectangles
  2189.         raster capabilities
  2190.             bit 0  simple bitBLT
  2191.             bit 1  device requires banding support
  2192.             bit 2  device requires scaling support
  2193.             bit 3  supports >64K bitmap
  2194. Note:  This function returns the device-capability bits for the given display
  2195. ---------------------------------------------
  2196. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  2197.     AX = 1900h
  2198. Return: AL = 00h  not installed
  2199.          FFh  installed
  2200. ---------------------------------------------
  2201. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  2202.     AX = 1901h
  2203.     BL = 00h if SHELLC transient
  2204.          01h if SHELLC resident
  2205.     DS:DX -> far call entry point for resident SHELLC.EXE
  2206. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  2207. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  2208. ---------------------------------------------
  2209. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  2210.     AX = 1902h
  2211.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  2212.          final filename element uppercased
  2213.     DS:DX -> buffer for results
  2214. Return: AL = 00h  failed, either
  2215.           (a) final filename element quoted at ES:DI does not match
  2216.               identity of shell batch file quoted as parameter of most
  2217.               recent call of SHELLB command, or
  2218.           (b) no more Program Start Commands available.
  2219.     AL= FFh  success, then:
  2220.         memory at DS:[DX+1] onwards filled as:
  2221.         DX+1:    BYTE    count of bytes of PSC
  2222.         DX+2: N BYTEs    Program Start Command text
  2223.             BYTE    0Dh terminator 
  2224. Explanation: COMMAND.COM executes the result of this call in preference to 
  2225.     reading a command from a batch file. Thus the batch file does not
  2226.     advance in execution for so long as SHELLB provides PSCs from its
  2227.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  2228.     menu interface. The final PSC of a sequence is finished with a 
  2229.     GOTO COMMON, which causes a loop back in the batch file which called
  2230.     SHELLC so as to execute SHELLC again. The check on batch file name
  2231.     permits PSCs to CALL nested batch files while PSCs are still stacked
  2232.     up for subsequent execution.
  2233. ---------------------------------------------
  2234. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  2235.     AX = 1903h
  2236.     ES:DI -> ASCIZ batch file name as for AX=1902h
  2237. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  2238.     AL = 00h if it does not
  2239. ---------------------------------------------
  2240. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLB.COM transient to TSR interface
  2241.     AX = 1904h
  2242. Return: ES:DI -> name of current shell batch file:
  2243.         WORD    number of bytes of name following
  2244.         BYTEs    (8 max) uppercase name of shell batch file
  2245. ---------------------------------------------
  2246. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - INSTALLATION CHECK
  2247.     AX = 1A00h
  2248. Return: AL = FFh if installed
  2249. ---------------------------------------------
  2250. INT 2F - Multiplex - AVATAR.SYS - INSTALLATION CHECK
  2251.     AX = 1A00h
  2252. Return: AL = FFh if installed
  2253.         CF clear
  2254.         BX = AVATAR protocol level supported
  2255.         CX = driver type
  2256.         0000h AVATAR.SYS
  2257.         4456h DVAVATAR.COM inside DESQview window
  2258.         DX = 0016h
  2259. Notes:    AVATAR may be distinguished from ANSI because ANSI does not change
  2260.       BX, CX, or DX
  2261.     AVATAR.SYS is a CON replacement by George Adam Stanislav which
  2262.       interprets AVATAR command codes in the same way that ANSI interprets
  2263.       ANSI command codes
  2264. ---------------------------------------------
  2265. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  2266.     AX = 1A01h
  2267.     CL = 7Fh for GET
  2268.        = 5Fh for SET
  2269.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  2270. Return: CF set on error
  2271.         AX = error code (many non-standard)
  2272.     CF clear if successful
  2273.         AX destroyed
  2274. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  2275. SeeAlso: AX=1A02h, INT 21/AX=440Ch
  2276. ---------------------------------------------
  2277. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - MISC REQUESTS
  2278.     AX = 1A02h
  2279.     DS:DX -> parameter block (see below)
  2280. SeeAlso: AX=1A01h
  2281.  
  2282. Format of parameter block:
  2283. Offset    Size    Description
  2284.  00h    BYTE    subfunction
  2285.         00h set/reset interlock
  2286.         01h get /L flag
  2287.  01h    BYTE    interlock state
  2288.         00h=reset, 01h=set
  2289.           This interlock prevents some of the ANSI.SYS post-processing
  2290.           in its hook onto INT 10, AH=00h mode set
  2291.  02h    BYTE    (returned)
  2292.         00h if /L not in effect
  2293.         01h if /L in effect
  2294. ---------------------------------------------
  2295. INT 2F - Multiplex - AVATAR.SYS - SET DRIVER STATE
  2296.     AX = 1A21h (AL='!')
  2297.     DS:SI -> command string with one or more state characters
  2298.     CX = length of command string
  2299. Return: CF set on error (invalid subfunction)
  2300.     CF clear if successful
  2301. Note:    the characters in the state string are interpreted left to right, and
  2302.       need not be in any particular order
  2303. SeeAlso: AX=1A3Fh
  2304.  
  2305. Values of state characters:
  2306.  'a'    activate driver
  2307.  'd'    disable driver
  2308.  'f'    use fast screen output
  2309.  'g'    always convert gray keys (+ and -) to function keys
  2310.  'G'    never convert gray keys
  2311.  'l'    convert gray keys only when ScrollLock active
  2312.  's'    use slow screen output
  2313.  't'    Tandy 1000 keyboard (not yet implemented)
  2314. ---------------------------------------------
  2315. INT 2F - Multiplex - AVATAR.SYS - QUERY DRIVER STATE
  2316.     AX = 1A3Fh (AL='?')
  2317.     ES:DI -> buffer
  2318.     CX = length of buffer in bytes
  2319. Return: CF clear
  2320.     CX = actual size of returned info
  2321. Note:    the returned information consists of multiple letters whose meanings
  2322.       are described under AX=1A21h
  2323. SeeAlso: AX=1A21h
  2324. ---------------------------------------------
  2325. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  2326.     AX = 1B00h
  2327. Return: AL = FFh if installed
  2328. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  2329.     This extension hooks onto INT 67/AH=58h and returns from that call data
  2330.       which excludes the physical pages being used by DOS.
  2331. SeeAlso: AX=1B01h
  2332. ---------------------------------------------
  2333. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extens internal - GET HIDDEN FRAME INFO
  2334.     AX = 1B01h
  2335.     DI = hidden physical page number
  2336. Return: AX = FFFFh if failed (no such hidden page)
  2337.     AX = 0000h if OK, then
  2338.          ES = segment of page frame
  2339.          DI = physical page number
  2340. Note:    this corresponds to the data edited out of the INT 67/AH=58h call
  2341. SeeAlso: AX=1BFFh
  2342. ---------------------------------------------
  2343. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS internal??? - ???
  2344.     AX = 1BFFh
  2345.     DI = ???
  2346. Return: AH = ???
  2347.     ES:DI -> ???
  2348. Note:    called by FASTOPEN
  2349. SeeAlso: AX=1B01h
  2350. ---------------------------------------------
  2351. INT 2F - Multiplex - OS/2 compatibility box - SWITCH DOS TO BACKGROUND
  2352.     AX = 4001h
  2353. SeeAlso: AX=4002h
  2354. ---------------------------------------------
  2355. INT 2F - Multiplex - OS/2 compatibility box - SWITCH DOS TO FOREGROUND
  2356.     AX = 4002h
  2357. SeeAlso: AX=4001h
  2358. ---------------------------------------------
  2359. INT 2F - Multiplex - XMS - INSTALLATION CHECK
  2360.     AX = 4300h
  2361. Return: AL = 80h XMS driver installed
  2362.     AL <> 80h no driver
  2363. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  2364.       above 640K
  2365.     this installation check DOES NOT follow the format used by other
  2366.       software
  2367. SeeAlso: AX=4310h
  2368. ---------------------------------------------
  2369. INT 2F - Multiplex - XMS - GET DRIVER ADDRESS
  2370.     AX = 4310h
  2371. Return: ES:BX -> driver entry point
  2372. SeeAlso: AX=4300h
  2373.  
  2374. Perform a FAR call to the driver entry point with AH set to the function code
  2375.     AH    function
  2376.     00h  Get XMS version number
  2377.          Return: AX = XMS version (in BCD)
  2378.              BX = internal revision number
  2379.              DX = 0001h if HMA (1M to 1M + 64K) exists
  2380.               0000h if HMA does not exist
  2381.     01h  Request High Memory Area (1M to 1M + 64K)
  2382.          DX = memory in bytes (for TSR or device drivers)
  2383.           FFFFh if application program
  2384.          Return: AX = 0001h success
  2385.             = 0000h failure
  2386.                BL = error code (see below)
  2387.     02h  Release High Memory Area
  2388.          Return: AX = 0001h success
  2389.             = 0000h failure
  2390.                BL = error code (see below)
  2391.     03h  Global enable A20, for using the HMA
  2392.          Return: AX = 0001h success
  2393.             = 0000h failure
  2394.                BL = error code (see below)
  2395.     04h  Global disable A20
  2396.          Return: AX = 0001h success
  2397.             = 0000h failure
  2398.                BL = error code (see below)
  2399.     05h  Local enable A20, for direct access to extended memory
  2400.          Return: AX = 0001h success
  2401.             = 0000h failure
  2402.                BL = error code (see below)
  2403.     06h  Local disable A20
  2404.          Return: AX = 0001h success
  2405.             = 0000h failure
  2406.                BL = error code (see below)
  2407.     07h  Query A20 state
  2408.          Return: AX = 0001h enabled
  2409.             = 0000h disabled
  2410.              BL = error code (0 = successful)
  2411.     08h  Query free extended memory, not counting HMA
  2412.          Return: AX = size of largest extended memory block in K
  2413.              DX = total extended memory in K
  2414.              BL = error code (see below)
  2415.     09h  Allocate extended memory block
  2416.          DX = Kbytes needed
  2417.          Return: AX = 0001h success
  2418.                DX = handle for memory block
  2419.             = 0000h failure
  2420.                BL = error code (see below)
  2421.     0Ah  Free extended memory block
  2422.          DX = handle of block to free
  2423.          Return: AX = 0001h success
  2424.             = 0000h failure
  2425.                BL = error code (see below)
  2426.     0Bh  Move extended memory block
  2427.          DS:SI -> EMM structure (see below)
  2428.          Note: if either handle is 0000h, the corresponding offset is
  2429.            considered to be an absolute segment:offset address in
  2430.            directly addressable memory
  2431.          Return: AX = 0001h success
  2432.             = 0000h failure
  2433.                BL = error code (see below)
  2434.     0Ch  Lock extended memory block
  2435.          DX = handle of block to lock
  2436.          Return: AX = 0001h success
  2437.                DX:BX = 32-bit linear address of locked block
  2438.             = 0000h failure
  2439.                BL = error code (see below)
  2440.     0Dh  Unlock extended memory block
  2441.          DX = handle of block to unlock
  2442.          Return: AX = 0001h success
  2443.             = 0000h failure
  2444.                BL = error code (see below)
  2445.     0Eh  Get handle information
  2446.          DX = handle for which to get info
  2447.          Return: AX = 0001h success
  2448.                BH = block's lock count
  2449.                BL = number of free handles left
  2450.                DX = block size in K
  2451.             = 0000h failure
  2452.                BL = error code (see below)
  2453.     0Fh  Reallocate extended memory block
  2454.          DX = handle of block
  2455.          BX = new size of block in K
  2456.          Return: AX = 0001h success
  2457.             = 0000h failure
  2458.                BL = error code (see below)
  2459.     10h  Request upper memory block (nonEMS memory above 640K)
  2460.          DX = size of block in paragraphs
  2461.          Return: AX = 0001h success
  2462.                BX = segment address of UMB
  2463.                DX = actual size of block
  2464.             = 0000h failure
  2465.                BL = error code (see below)
  2466.                DX = largest available block
  2467.     11h  Release upper memory block
  2468.          DX = segment address of UMB to release
  2469.          Return: AX = 0001h success
  2470.             = 0000h failure
  2471.                BL = error code (see below)
  2472. Note:    HIMEM.SYS requires at least 256 bytes free stack space
  2473.  
  2474. Format of EMM structure:
  2475. Offset    Size    Description
  2476.  00h    DWORD    number of bytes to move (must be even)
  2477.  04h    WORD    source handle
  2478.  06h    DWORD    offset into source block
  2479.  0Ah    WORD    destination handle
  2480.  0Ch    DWORD    offset into destination block
  2481.  
  2482. Error codes returned in BL:
  2483.     80h Function not implemented
  2484.     81h Vdisk was detected
  2485.     82h An A20 error occurred
  2486.     8Eh a general driver error
  2487.     8Fh unrecoverable driver error
  2488.     90h HMA does not exist
  2489.     91h HMA is already in use
  2490.     92h DX is less than the /HMAMIN= parameter
  2491.     93h HMA is not allocated
  2492.     94h A20 line still enabled
  2493.     A0h all extended memory is allocated
  2494.     A1h all available extended memory handles are allocated
  2495.     A2h Invalid handle
  2496.     A3h Source handle is invalid
  2497.     A4h Source offset is invalid
  2498.     A5h Destination handle is invalid
  2499.     A6h Destination offset is invalid
  2500.     A7h Length is invalid
  2501.     A8h Move has an invalid overlap
  2502.     A9h Parity error occurred
  2503.     AAh Block is not locked
  2504.     ABh Block is locked
  2505.     ACh Block lock count overflowed
  2506.     ADh Lock failed
  2507.     B0h Only a smaller UMB is available
  2508.     B1h No UMB's are available
  2509.     B2h UMB segment number is invalid
  2510. ---------------------------------------------
  2511. INT 2F - Multiplex - F-LOCK.EXE 
  2512.     AX = 4653h
  2513.     CX = 0002h
  2514.     BX = subfunction
  2515.         0000h  installation check
  2516.         Return: AX = FFFFh
  2517.         0001h  uninstall
  2518.         0002h  disable (v1.08 and below only)
  2519.         0003h  enable (v1.08 and below only)
  2520. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  2521.       Skulason
  2522. ---------------------------------------------
  2523. INT 2F - Multiplex - F-XCHK.EXE
  2524.     AX = 4653h
  2525.     CX = 0003h
  2526.     BX = subfunction
  2527.         0000h  installation check
  2528.         Return: AX = FFFFh
  2529.         0001h  uninstall
  2530. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  2531.       Skulason
  2532. ---------------------------------------------
  2533. INT 2F - Multiplex - F-POPUP.EXE
  2534.     AX = 4653h
  2535.     CX = 0004h
  2536.     BX = subfunction
  2537.         0000h  installation check
  2538.         Return: AX = FFFFh
  2539.         0001h  uninstall
  2540.         0002h  disable (v1.08 and below only)
  2541.         0003h  enable (v1.08 and below only)
  2542. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  2543.       Fridrik Skulason
  2544. ---------------------------------------------
  2545. INT 2F - Multiplex - F-DLOCK.EXE
  2546.     AX = 4653h
  2547.     CX = 0005h
  2548.     BX = subfunction
  2549.         0000h installation check
  2550.         Return: AX = FFFFh
  2551.         0001h uninstall
  2552. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  2553.       Fridrik Skulason
  2554. ---------------------------------------------
  2555. INT 2F - Multiplex - MS Windows 3 - INSTALLATION CHECK
  2556.     AX = 4680h
  2557. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode
  2558.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  2559.             mode
  2560. Note:    not officially documented, but Microsoft has indicated that they
  2561.       intend to provide an installation check which works in all modes
  2562. SeeAlso: AX=1600h
  2563. ---------------------------------------------
  2564. INT 2F - Multiplex - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  2565.     AX = 5453h
  2566.     BX = subfunction
  2567.         00h installation check
  2568.         DS:SI -> 8-char blank-padded name
  2569.         Return: AX = FFFFh installed
  2570.                 CX = ID number of already-installed copy
  2571.                = anything else, not installed
  2572.                 CX = ID number for TSR when installed
  2573.         01h get user parameters
  2574.         CX = TSR ID number
  2575.         Return: AX = 0000h successful
  2576.                ES:BX -> user parameter block (see below)
  2577.                = nonzero failed
  2578.         02h check if hotkey in use
  2579.         CL = scan code of hot key
  2580.         Return: AX = FFFFh hot key conflicts with another TSR
  2581.                  otherwise safe to use the hotkey
  2582.         03h replace default critical error handler
  2583.         CX = TSR ID number
  2584.         DS:SI -> new routine for INT 24h
  2585.         Return: AX = nonzero, unable to install new handler
  2586.         04h get internal data area
  2587.         CX = TSR ID number
  2588.         Return: AX = 0000h
  2589.                 ES:BX -> TSR's internal data area (see below)
  2590.                = nonzero, TSR not found
  2591.         05h set multiple hot keys
  2592.         CX = TSR ID number
  2593.         DL = number of additional hot keys to allocate
  2594.         DS:SI -> table of hot keys
  2595.             BYTE  hotkey scan code
  2596.             BYTE  hotkey shift state
  2597.             BYTE  flag value to pass to TSR (nonzero)
  2598.         Return: AX = nonzero, unable to install hot keys
  2599.         06h - 0Fh reserved
  2600.         10h enable TSR
  2601.         CX = TSR ID number
  2602.         Return: AX = nonzero, unable to enable
  2603.         11h disable TSR
  2604.         CX = TSR ID number
  2605.         Return: AX = nonzero, unable to disable
  2606.         12h unload TSR
  2607.         CX = TSR ID number
  2608.         Return: AX = nonzero, invalid TSR number
  2609.         Note: if any interrupts used by TSR have been grabbed by
  2610.             another TSR, the TesSeRact routines will wait until
  2611.             it is safe to remove the indicated TSR from memory
  2612.         13h restart TSR
  2613.         CX = TSR ID number of TSR which was unloaded but is still in
  2614.              memory
  2615.         Return: AX = nonzero, unable to restart TSR
  2616.         14h get status word
  2617.         CX = TSR ID number
  2618.         Return: AX = FFFFh invalid ID number
  2619.                = other, successful
  2620.                 BX = bit flags
  2621.         15h set status word
  2622.         CX = TSR ID number
  2623.         DX = new bit flags
  2624.         Return: AX = nonzero, unable to set status word
  2625.         16h get INDOS state at popup
  2626.         CX = TSR ID number
  2627.         Return: AX = 0000h successful
  2628.                 BX = value of INDOS flag
  2629.         17h - 1Fh reserved
  2630.         20h call user procedure
  2631.         CX = TSR ID number
  2632.         ES:DI -> user-defined data
  2633.         Return: AX = 0000h successful
  2634.         21h stuff keystrokes into keyboard buffer
  2635.         CX = TSR ID number
  2636.         DL = speed
  2637.             00h stuff keystrokes only when buffer is empty
  2638.             01h stuff up to four keystrokes per clock tick
  2639.             02h stuff up to 15 keystrokes per clock tick
  2640.         DH = scan code flag
  2641.             if zeor, buffer contains alternating ASCII and scan codes
  2642.             if nonzero, buffer contains only ASCII codes
  2643.         SI = number of keystrokes
  2644.         ES:DI -> buffer to stuff
  2645.         Return: AX = 0000h success
  2646.                  F0F0h user aborted with ^C or ^Break
  2647.                  other unable to stuff keystrokes
  2648.         22h (v1.10) trigger popup
  2649.         CX = TSR ID number
  2650.         Return: AX = 0000h success, TSR will either pop up or beep to
  2651.                    indicate that it is unable to pop up
  2652.                  nonzero invalid ID number
  2653.         23h (v1.10) invoke TSR's background function
  2654.         CX = TSR ID number
  2655.         Return: AX = 0000h success
  2656.                  FFFFh not safe to call background function
  2657.                  nonzero invalid ID number
  2658.         24h - 2Fh reserved
  2659. Note:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  2660.       fully supports the TesSeRact API, as do the SWAP?? programs by 
  2661.       Innovative Data Concepts.
  2662.  
  2663. Format of User Parameter Block:
  2664. Offset    Size    Description
  2665.  00h  8 BYTEs    blank-padded TSR name
  2666.  08h    WORD    TSR ID number
  2667.  0Ah    DWORD    bitmap of supported functions
  2668.  0Eh    BYTE    scan code of primary hotkey
  2669.             00h = pop up when shift states match
  2670.             FFh = no popup (if shift state also FFh)
  2671.  0Fh    BYTE    shift state of primary hotkey
  2672.             FFh = no popup (if scan code also FFh)
  2673.  10h    BYTE    number of secondary hotkeys
  2674.  11h    DWORD    pointer to extra hotkeys set by func 05h
  2675.  15h    WORD    current TSR status flags
  2676.  17h    WORD    PSP segment of TSR
  2677.  19h    DWORD    DTA for TSR
  2678.  1Dh    WORD    default DS for TSR
  2679.  1Fh    DWORD    stack at popup
  2680.  23h    DWORD    stack at background invocation
  2681.  
  2682. Format of TSR internal data area:
  2683. Offset    Size    Description
  2684.  00h    BYTE    revision level of TesSeRact library
  2685.  01h    BYTE    type of popup in effect
  2686.  02h    BYTE    INT 08 occurred since last invocation
  2687.  03h    BYTE    INT 13 occurred since last invocation
  2688.  04h    BYTE    active interrupts
  2689.  05h    BYTE    active soft interrupts
  2690.  06h    BYTE    DOS major version
  2691.  07h    BYTE    how long to wait before popping up
  2692.  08h    DWORD    pointer to INDOS flag
  2693.  0CH    DWORD    pointer to DOS critical error flag
  2694.  10h    WORD    PSP segment of interrupted program
  2695.  12h    WORD    PSP segment of prog interrupted by INT 28
  2696.  14h    DWORD    DTA of interrupted program
  2697.  18h    DWORD    DTA of program interrupted by INT 28
  2698.  1Ch    WORD    SS of interrupted program
  2699.  1Eh    WORD    SP of interrupted program
  2700.  20h    WORD    SS of program interrupted by INT 28
  2701.  22h    WORD    SP of program interrupted by INT 28
  2702.  24h    DWORD    INT 24 of interrupted program
  2703.  28h  3 WORDs    DOS 3+ extended error info
  2704.  2Eh    BYTE    old BREAK setting
  2705.  2Fh    BYTE    old VERIFY setting
  2706.  30h    BYTE    were running MS WORD 4.0 before popup
  2707.  31h    BYTE    MS WORD 4.0 special popup flag
  2708.  32h    BYTE    enhanced keyboard call in use
  2709.  33h    BYTE    delay for MS WORD 4.0
  2710. 11 times:
  2711.     DWORD    old interrupt vector
  2712.     BYTE    interrupt number
  2713.     DWORD    new interrupt vector
  2714. ---------------------------------------------
  2715. INT 2F - Multiplex - SCRNSAV2.COM - INSTALLATION CHECK
  2716.     AX = 6400h
  2717. Return: AL = 00h not installed
  2718.          FFh installed
  2719. Note:    SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  2720. ---------------------------------------------
  2721. INT 2F - Multiplex - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  2722.     AX = 7A00h
  2723. Return: AL = 00h not installed
  2724.        = FFh installed
  2725.         ES:DI -> FAR entry point for routines otherwise accessed
  2726.              through INT 7Ah
  2727. ---------------------------------------------
  2728. INT 2F - Multiplex - EASY-NET - INSTALLATION CHECK
  2729.     AX = 8000h
  2730. Return: AL = 00h not installed
  2731.          FFh installed
  2732. Note:    EASY-NET is a shareware two-machine serial-port network
  2733. ---------------------------------------------
  2734. INT 2F - Multiplex - WHOA!.COM - INSTALLATION CHECK
  2735.     AX = 8900h
  2736. Return: AL = 00h not installed
  2737.        = FFh installed
  2738. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  2739. ---------------------------------------------
  2740. INT 2F - Multiplex - WHOA!.COM - UNINSTALL
  2741.     AX = 8901h
  2742. Return: AL = FDh successful
  2743.        = FEh error
  2744. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  2745. ---------------------------------------------
  2746. INT 2F - Multiplex - WHOA!.COM - SET DELAY COUNT
  2747.     AX = 8902h
  2748.     BX = delay count (larger values slow system down more)
  2749. Return: AL = FDh successful
  2750.        = FEh error
  2751. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  2752. ---------------------------------------------
  2753. INT 2F - Multiplex - RAID - ???
  2754.     AH = 90h
  2755.     ???
  2756. Return: ???
  2757. Note:    RAID is a TSR utility program that resides mostly in EMS
  2758. ---------------------------------------------
  2759. INT 2F - Multiplex - VIDCLOCK.COM - INSTALLATION CHECK
  2760.     AX = AA00h
  2761. Return: AL = 00h not installed
  2762.          FFh installed
  2763. Note:    VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  2764. ---------------------------------------------
  2765. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  2766.     AX = AD00h
  2767. Return: AL = FFh if installed
  2768.         BX = ??? (0100h in MS-DOS 3.30, PCDOS 4.01)
  2769. ---------------------------------------------
  2770. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - SET ???
  2771.     AX = AD01h
  2772.     BX = ???
  2773. Return: ???
  2774.     CF set on error
  2775. ---------------------------------------------
  2776. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - GET ???
  2777.     AX = AD02h
  2778. Return: BX = ??? (value set with AX=AD01h)
  2779. ---------------------------------------------
  2780. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - GET ???
  2781.     AX = AD03h
  2782.     ES:DI -> user buffer
  2783.     CX = size of buffer
  2784. Return: CF set if buffer too small
  2785.     CF clear if successful
  2786. ---------------------------------------------
  2787. INT 2F - Multiplex - DOS 4+ DISPLAY.SYS internal - ???
  2788.     AX = AD04h
  2789.     ???
  2790. Return: ???
  2791. ---------------------------------------------
  2792. INT 2F - Multiplex - DOS 4+ DISPLAY.SYS internal - INSTALLATION CHECK???
  2793.     AX = AD10h
  2794.     ???
  2795. Return: AX = FFFFh
  2796.     BX = ??? (0100h in PCDOS 4.01)
  2797. ---------------------------------------------
  2798. INT 2F - Multiplex - DOS 4.0 - ???
  2799.     AX = AD40h
  2800.     DX = ???
  2801.     ???
  2802. Return: ???
  2803. Note:    called by PCDOS 4.01 PRINT.COM
  2804. ---------------------------------------------
  2805. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  2806.     AX = AD80h
  2807. Return: AL = FFh if installed
  2808.         BX = ??? (0100h in MSDOS 3.30 and PCDOS 4.01)
  2809.         ES:DI -> internal data (see below)
  2810.  
  2811. Format of KEYB internal data:
  2812. Offset    Size    Description
  2813.  00h    DWORD    original INT 09
  2814.  04h    DWORD    original INT 2F
  2815.  08h  6 BYTEs    ???
  2816.  0Eh    WORD    flags
  2817.  10h    BYTE    ???
  2818.  11h    BYTE    ???
  2819.  12h  4 BYTEs    ???
  2820.  16h  2 BYTEs    country ID letters
  2821.  18h    WORD    current code page
  2822. ---DOS 3.3---
  2823.  1Ah    WORD    pointer to first item in list of code page tables???
  2824.  1Ch    WORD    pointer to ??? item in list of code page tables
  2825.  1Eh  2 BYTEs    ???
  2826.  20h    WORD    pointer to key translation data
  2827.  22h    WORD    pointer to last item in code page table list (see below)
  2828.  24h  9 BYTEs    ???
  2829. ---DOS 4.01---
  2830.  1Ah  2 BYTEs    ???
  2831.  1Ch    WORD    pointer to first item in list of code page tables???
  2832.  1Eh    WORD    pointer to ??? item in list of code page tables
  2833.  20h  2 BYTEs    ???
  2834.  22h    WORD    pointer to key translation data
  2835.  24h    WORD    pointer to last item in code page table list (see below)
  2836.  26h  9 BYTEs    ???
  2837.  
  2838. Format of code page table list entries:
  2839. Offset    Size    Description
  2840.  00h    WORD    pointer to next item, FFFFh = last
  2841.  02h    WORD    code page
  2842.  04h  2 BYTEs    ???
  2843.  
  2844. Format of translation data:
  2845. Offset    Size    Description
  2846.  00h    WORD    size of data in bytes, including this word
  2847.  02h N-2 BYTEs    ???
  2848. ---------------------------------------------
  2849. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - SET KEYBOARD CODE PAGE
  2850.     AX = AD81h
  2851.     BX = code page
  2852. Return: CF set on error
  2853.         AX = 0001h (code page not available)
  2854.     CF clear if successful
  2855. Note:    called by DISPLAY.SYS
  2856. SeeAlso: AX=AD82h
  2857. ---------------------------------------------
  2858. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - SET KEYBOARD MAPPING
  2859.     AX = AD82h
  2860.     BL = 00h US keyboard (Control-Alt-F1)
  2861.        = FFh foreign keyboard (Control-Alt-F2)
  2862. Return: CF set on error (BL not 00h or FFh)
  2863.     CF clear if successful
  2864. SeeAlso: AX=AD81h
  2865. ---------------------------------------------
  2866. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALL CHECK
  2867.     AX = AE00h
  2868.     DX = FFFFh
  2869.     DS:BX -> command line
  2870. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  2871.     AL = 00h if the command should be executed as usual
  2872. Notes:    This call provides a mechanism for TSRs to install permanent extensions
  2873.       to the command repertoire of COMMAND.COM.  It appears that
  2874.       COMMAND.COM makes this call before executing the current command
  2875.       line,    and does not execute it itself if the return is FFh.
  2876.     APPEND hooks this call, to allow subsequent APPEND commands to execute
  2877.       without re-running APPEND
  2878.  
  2879. Format of command line:
  2880. Offset    Size    Description
  2881.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  2882.  01h    BYTE    count of bytes to follow
  2883.       N BYTEs    command line text, terminated by 0Dh
  2884. ---------------------------------------------
  2885. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  2886.     AX = AE01h
  2887.     DX = FFFFh
  2888.     DS:SI -> buffer
  2889. Return: buffer at DS:SI filled with a length byte followed by the uppercase
  2890.       internal command to execute (if length not 0)
  2891. Notes:    this call requests execution of the command which a previous call to
  2892.       AX=AE00h indicated was resident
  2893.     APPEND hooks this call
  2894.     if the buffer is filled with a nonempty string, COMMAND.COM will
  2895.       attempt to execute it as an internal command
  2896. ---------------------------------------------
  2897. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  2898.     AX = B000h
  2899. Return: AL = 00h not installed, OK to install
  2900.        = 01h not installed, not OK to install
  2901.        = FFh installed
  2902. Note:    called by DISPLAY.SYS
  2903. ---------------------------------------------
  2904. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - GET ???
  2905.     AX = B001h
  2906.     DS:DX -> 4-byte buffer (see below)
  2907. Return: buffer filled
  2908.     AL = FFh
  2909.  
  2910. Format of buffer:
  2911. Offset    Size    Description
  2912.  00h    WORD    ??? (PCDOS 3.30/4.01 fill in 0130h, MSDOS 3.30 fills in 0030h)
  2913.  02h    WORD    CS of resident code
  2914. ---------------------------------------------
  2915. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - INSTALLATION CHECK
  2916.     AX = B400h
  2917. Return: AL = FFh if installed
  2918. ---------------------------------------------
  2919. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - GET HOST BUFFER ADDRESS
  2920.     AX = B401h
  2921. Return: ES -> host screen buffer (PC ASCII format)
  2922.     ES unchanged if communications not started
  2923. ---------------------------------------------
  2924. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  2925.     AX = B402h
  2926.     BX = ???
  2927. Return: ???
  2928. ---------------------------------------------
  2929. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  2930.     AX = B403h
  2931.     ???
  2932. Return: ???
  2933. ---------------------------------------------
  2934. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  2935.     AX = B404h
  2936.     ???
  2937. Return: ???
  2938. ---------------------------------------------
  2939. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  2940.     AX = B405h
  2941.     ???
  2942. Return: ???
  2943. ---------------------------------------------
  2944. INT 2F - Multiplex - APPEND - INSTALLATION CHECK
  2945.     AX = B700h
  2946. Return: AL = 00h not installed
  2947.          FFh if installed
  2948. Note:    MSDOS 3.30 APPEND refuses to install itself when run inside TopView or
  2949.       a TopView-compatible environment
  2950. ---------------------------------------------
  2951. INT 2F - Multiplex - APPEND - ???
  2952.     AX = B701h
  2953.     ???
  2954. Note:    MSDOS 3.30 APPEND displays "Incorrect APPEND Version" and aborts caller
  2955. ---------------------------------------------
  2956. INT 2F - Multiplex - APPEND - VERSION CHECK
  2957.     AX = B702h
  2958. Return: AX = FFFFh if not DOS 4.0 APPEND
  2959.     AL = major version number
  2960.     AH = minor version number, otherwise
  2961. SeeAlso: AX=B710h
  2962. ---------------------------------------------
  2963. INT 2F - Multiplex - DOS 3.3 APPEND - HOOK INT 21
  2964.     AX = B703h
  2965.     ES:DI -> INT 21 handler APPEND should chain to
  2966. Return: ES:DI -> APPEND's INT 21 handler
  2967. Note:    each invocation of this function toggles a flag which APPEND uses to
  2968.       determine whether to chain to the user handler or the original
  2969.       INT 21
  2970. ---------------------------------------------
  2971. INT 2F - Multiplex - DOS 3.3+ APPEND - GET APPEND PATH
  2972.     AX = B704h
  2973. Return: ES:DI -> active APPEND path (128 bytes max)
  2974. ---------------------------------------------
  2975. INT 2F - Multiplex - DOS 4.0 APPEND - GET APPEND FUNCTION STATE
  2976.     AX = B706h
  2977. Return: BX = APPEND state
  2978.         bit 0: set if APPEND enabled
  2979.         bits 1-12 reserved
  2980.         bit 13: set if /PATH flag active
  2981.         bit 14: set if /E flag active (environment var APPEND exists)
  2982.         bit 15: set if /X flag active
  2983. ---------------------------------------------
  2984. INT 2F - Multiplex - DOS 4.0 APPEND - SET APPEND FUNCTION STATE
  2985.     AX = B707h
  2986.     BX = APPEND state bits (see AX=B706h)
  2987. ---------------------------------------------
  2988. INT 2F - Multiplex - DOS 3.3+ APPEND - GET VERSION INFO
  2989.     AX = B710h
  2990. Return: AX = ???
  2991.     BX = ??? (0000h in MSDOS 3.30)
  2992.     CX = ??? (0000h in MSDOS 3.30)
  2993.     DL = major version
  2994.     DH = minor version
  2995. SeeAlso: AX=B702h
  2996. ---------------------------------------------
  2997. INT 2F - Multiplex - DOS 4.0 APPEND - SET RETURN FOUND NAME STATE
  2998.     AX = B711h
  2999. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  3000.     6Ch, the fully qualified filename is written over top of the filename
  3001.     passed to the INT 21h call.  The application must provide a 
  3002.     sufficiently large buffer.  This state is reset after next INT 21h
  3003.     call processed by APPEND.
  3004. ---------------------------------------------
  3005. INT 2F - Multiplex - Network - INSTALLATION CHECK
  3006.     AX = B800h
  3007. Return: AL = 00h not installed
  3008.         nonzero installed
  3009.           BX = installed component flags (test in this order!)
  3010.            bit 6   server
  3011.            bit 2   messenger
  3012.            bit 7   receiver
  3013.            bit 3   redirector
  3014. ---------------------------------------------
  3015. INT 2F - Multiplex - Network - GET CURRENT POST HANDLER ADDRESS
  3016.     AX = B803h
  3017. Return: ES:BX = post address
  3018. SeeAlso: AX=B804h,B903h
  3019. ---------------------------------------------
  3020. INT 2F - Multiplex - Network - SET NEW POST HANDLER ADDRESS
  3021.     AX = B804h
  3022.     ES:BX -> new FAR post handler
  3023. Notes:    used in conjunction with AX=B803h to hook into the network event post
  3024.       routine.
  3025.     The specified handler is called on any network event.  Two events are
  3026.       defined: message received and critical network error.
  3027. SeeAlso: AX=B803h,B904h
  3028.  
  3029. Values post routine is called with:
  3030.     AX = 0000h single block message
  3031.         DS:SI -> ASCIZ originator name
  3032.         DS:DI -> ASCIZ destination name
  3033.         ES:BX -> text header (see below)
  3034.     AX = 0001h start multiple message block
  3035.         CX = block group ID
  3036.         DS:SI -> ASCIZ originator name
  3037.         DS:DI -> ASCIZ destination name
  3038.     AX = 0002h multiple block text
  3039.         CX = block group ID
  3040.         ES:BX -> text header (see below)
  3041.     AX = 0003h end multiple block message
  3042.         CX = block group ID
  3043.     AX = 0004h message aborted due to error
  3044.         CX = block group ID
  3045.     AX = 0101h server received badly formatted network request
  3046.         Return: AX = FFFFh (PC LAN will process error)
  3047.     AX = 0102h unexpected network error
  3048.         ES:BX -> NCB (see INT 5C)
  3049.     AX = 0103h server received INT 24 error
  3050.         other registers as for INT 24, except AH is in BH
  3051.         Return: as below, but only 0000h and FFFFh allowed
  3052. Return:    AX = response code
  3053.         0000h user post routine processed message
  3054.         0001h PC LAN will process message, but message window not displayed
  3055.         FFFFh PC LAN will process message
  3056.     
  3057. Format of text header:
  3058. Offset    Size    Description
  3059.  00h    WORD    length of text (maximum 512 bytes)
  3060.  02h  N BYTEs    text of message
  3061. Note:    all CRLF sequences in message text are replaced by 14h
  3062. ---------------------------------------------
  3063. INT 2F - Multiplex - Network - GET NetBIOS NAME NUMBER OF MACHINE NAME
  3064.     AX = B807h
  3065. Return: CH = NetBIOS name number of the machine name
  3066. SeeAlso: INT 21/AX=5E00h
  3067. ---------------------------------------------
  3068. INT 2F - Multiplex - Network - ???
  3069.     AX = B808h
  3070.     ???
  3071. Return: ???
  3072. ---------------------------------------------
  3073. INT 2F - Multiplex - LANtastic Network - VERSION CHECK
  3074.     AX = B809h
  3075. Return: AH = major version
  3076.     AL = minor version
  3077. ---------------------------------------------
  3078. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  3079.     AX = B900h
  3080. Return: AL = 00h if not installed
  3081.          FFh if installed
  3082. ---------------------------------------------
  3083. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  3084.     AX = B901h
  3085. Return: AL = ???
  3086.     ES:BX -> RECEIVER.COM INT 2F handler
  3087. Note:    allows more efficient execution by letting the caller bypass any other
  3088.       INT 2F handlers which have been added since RECEIVER.COM was
  3089.       installed
  3090. ---------------------------------------------
  3091. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  3092.     AX = B903h
  3093. Return: ES:BX -> POST handler
  3094. SeeAlso: AX=B803h,B904h
  3095. ---------------------------------------------
  3096. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  3097.     AX = B904h
  3098.     ES:BX -> new POST handler
  3099. SeeAlso: AX=B804h,B903h
  3100. ---------------------------------------------
  3101. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  3102.     AX = B905h
  3103.     DS:BX -> 128-byte buffer for filename 1
  3104.     DS:DX -> 128-byte buffer for filename 2
  3105. Return: buffers filled from RECEIVER.COM internal buffers
  3106. Note:    use of filenames is unknown, but one appears to be for storing messages
  3107. SeeAlso: AX=B906h
  3108. ---------------------------------------------
  3109. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  3110.     AX = B906h
  3111.     DS:BX -> 128-byte buffer for filename 1
  3112.     DS:DX -> 128-byte buffer for filename 2
  3113. Return: RECEIVER.COM internal buffers filled from user buffers
  3114. Note:    use of filenames is unknown, but one appears to be for storing messages
  3115. SeeAlso: AX=B905h
  3116. ---------------------------------------------
  3117. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  3118.     AX = B908h
  3119.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  3120. Note:    this call replaces the address to which RECEIVER.COM chains on an
  3121.       INT 09 without preserving the original value.  This allows a prior
  3122.       handler to unlink, but does not allow a new handler to be added
  3123.       such that RECEIVER gets the INT 09 first.
  3124. ---------------------------------------------
  3125. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  3126.     AX = BF00h
  3127. Return: AL = FFh if installed
  3128. ---------------------------------------------
  3129. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  3130.     AX = BF01h
  3131.     ???
  3132. Return: ???
  3133. ---------------------------------------------
  3134. INT 2F - Multiplex - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  3135.     AX = BF80h
  3136.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  3137. Return: AL = FFh if installed
  3138.         ES:DI -> internal workspace
  3139. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  3140. ---------------------------------------------
  3141. INT 2F - Multiplex - Communicating Applications Spec - INSTALLATION CHECK
  3142.     AX = CB00h
  3143. Return: AL = 00h not installed, OK to install
  3144.          01h not installed, not OK to install
  3145.          FFh installed
  3146. Note:    AH = CBh is the default identifier, but may be reconfigured
  3147. ---------------------------------------------
  3148. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT A TASK
  3149.     AX = CB01h
  3150.     DS:DX -> ASCIZ name of task control file
  3151. Return: AX >= 0: event handle
  3152.        < 0: error code
  3153. Note:    files needed for an event must be kept until task is complete or error
  3154. SeeAlso: AX=CB0Bh
  3155.  
  3156. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  3157.   Class 00h    --- FAX warnings
  3158.     Subcode 00h    no error
  3159.         02h    bad scanline count
  3160.         03h    page sent with errors, could not retransmit
  3161.         04h    received data lost
  3162.         05h    invalid or missing logo file
  3163.         06h    filename does not match nonstandard format (NSF) header
  3164.         07h    file size does not match NSF header
  3165.   Class 01h    --- DOS warnings (data was sent)
  3166.     Subcode 01h    invalid function
  3167.         05h    access denied
  3168.         06h    invalid handle
  3169.         others    see INT 21/AH=59h
  3170.   Class 02h    --- fatal errors (data not sent)
  3171.     Subcode    00h    multiplex handler failed
  3172.         01h    unknown command
  3173.         02h    bad event handle
  3174.         03h    FIND NEXT attempted before FIND FIRST
  3175.         04h    no more events
  3176.         07h    invalid queue type
  3177.         08h    bad control file
  3178.         09h    communication board busy
  3179.         0Ah    invalid command parameter
  3180.         0Bh    can't uninstall resident code
  3181.         0Ch    file exists
  3182.         80h    unknown task type
  3183.         81h    bad phone number
  3184.         82h    bad .PCX file header
  3185.         83h    unexpected EOF
  3186.         84h    unexpected disconnect
  3187.         85h    too many dialing retries
  3188.         86h    no file specified for send
  3189.         87h    communication board timeout
  3190.         88h    received too many pages (>1023) of data
  3191.         89h    manual connect initiated too long ago
  3192.         8Ah    hardware command set error
  3193.         8Bh    bad NonStandard Format (NSF) header file
  3194.   Class 03h    --- fatal DOS errors
  3195.     Subcode 02h    file not found
  3196.         03h    path not found
  3197.         others    see INT 21/AH=59h
  3198.   Class 04h    --- FAX errors
  3199.     Subcode 03h    other FAX machine incompatible
  3200.         5Eh    other FAX machine jammed
  3201. ---------------------------------------------
  3202. INT 2F - Multiplex - Communicating Applications Spec - ABORT CURRENT EVENT
  3203.     AX = CB02h
  3204. Return: AX >= 0: event handle of aborted event (>= 0)
  3205.        < 0: error code (see AX=CB01h)
  3206. SeeAlso: AX=CB10h
  3207. ---------------------------------------------
  3208. INT 2F - Multiplex - Communicating Applications Spec - FIND FIRST QUEUE ENTRY
  3209.     AX = CB05h
  3210.     CX = status of events to find
  3211.         0000h successful completion
  3212.         0001h waiting to be processed
  3213.         0002h number has been dialed
  3214.         0003h connection established, sending
  3215.         0004h connection established, receiving
  3216.         0005h even aborted
  3217.         FFFFh find any event, regardless of status
  3218.         other negative values, match error code
  3219.     DH = direction
  3220.         00h chronological order, earliest to latest
  3221.         01h reverse chronological order, latest to earliest
  3222.     DL = queue to search
  3223.         00h task queue
  3224.         01h receive queue
  3225.         02h log queue
  3226. Return: AX = 0000h successful
  3227.         BX = event handle for found event
  3228.        < 0       error code (see AX=CB01h)
  3229. SeeAlso: AX=CB06h
  3230. ---------------------------------------------
  3231. INT 2F - Multiplex - Communicating Applications Spec - FIND NEXT QUEUE ENTRY
  3232.     AX = CB06h
  3233.     DL = queue to search
  3234.         00h task queue
  3235.         01h receive queue
  3236.         02h log queue
  3237. Return: AX = 0000h successful
  3238.         BX = event handle for found event
  3239.        < 0       error code (see AX=CB01h)
  3240. Note:    direction of search is same as preceding FIND FIRST call
  3241. SeeAlso: AX=CB05h
  3242. ---------------------------------------------
  3243. INT 2F - Multiplex - Communicating Applications Spec - OPEN FILE
  3244.     AX = CB07h
  3245.     BX = event handle
  3246.     CX = receive file number (ignored for task queue and log queue)
  3247.         0000h  open receive control file
  3248.         N       open Nth received data file
  3249.     DL = queue
  3250.         00h task queue
  3251.         01h receive queue control file or received file, as given by CX
  3252.         02h log queue
  3253. Return: AX = 0000h successful
  3254.         BX = DOS file handle for requested file
  3255.        < 0       error code (see AX=CB01h)
  3256. ---------------------------------------------
  3257. INT 2F - Multiplex - Communicating Applications Spec - DELETE FILE
  3258.     AX = CB08h
  3259.     BX = event handle
  3260.     CX = receive file number
  3261.         0000h delete ALL received files and receive control file
  3262.         N      delete Nth received file
  3263.     DL = queue
  3264.         00h delete control file in task queue
  3265.         01h delete file in receive queue, as given by CX
  3266.         02h delete control file in log queue (individual deletions not
  3267.         recommended, to maintain integrity of log)
  3268. Return: AX = 0000h successful
  3269.        < 0       error code (see AX=CB01h)\
  3270. SeeAlso: AX=CB09h
  3271. ---------------------------------------------
  3272. INT 2F - Multiplex - Communicating Applications Spec - DELETE ALL FILES IN Q
  3273.     AX = CB09h
  3274.     DL = queue
  3275.         00h delete all control files in task queue
  3276.         01h delete all files in receive queue
  3277.         02h delete all control files in log queue
  3278. Return: AX = 0000h successful
  3279.        < 0       error code (see AX=CB01h)
  3280. SeeAlso: AX=CB08h
  3281. ---------------------------------------------
  3282. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT DATE
  3283.     AX = CB0Ah
  3284.     BX = event handle
  3285.     DL = queue
  3286.         00h task queue
  3287.         01h receive queue
  3288.         02h log queue
  3289. Return: AX = 0000h successful
  3290.         CX = year
  3291.         DH = month
  3292.         DL = day
  3293.        < 0       error code (see AX=CB01h)
  3294. SeeAlso: AX=CB0Ch
  3295. ---------------------------------------------
  3296. INT 2F - Multiplex - Communicating Applications Spec - SET TASK DATE
  3297.     AX = CB0Bh
  3298.     BX = event handle (task event only)
  3299.     CX = year
  3300.     DH = month
  3301.     DL = day
  3302. Return: AX = 0000h successful
  3303.        < 0       error code (see AX=CB01h)
  3304. Note:    setting a task's date and time to before the current date and time
  3305.       causes it to execute immediately
  3306. SeeAlso: AX=CB01h,CB0Dh
  3307. ---------------------------------------------
  3308. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT TIME
  3309.     AX = CB0Ch
  3310.     BX = event handle
  3311.     DL = queue
  3312.         00h task queue
  3313.         01h receive queue
  3314.         02h log queue
  3315. Return: AX = 0000h successful
  3316.         CH = hour
  3317.         CL = minute
  3318.         DH = second
  3319.         DL = 00h
  3320.        < 0       error code (see AX=CB01h)
  3321. SeeAlso: AX=CB0Ah,CB0Dh
  3322. ---------------------------------------------
  3323. INT 2F - Multiplex - Communicating Applications Spec - SET TASK TIME
  3324.     AX = CB0Dh
  3325.     BX = event handle (task events only)
  3326.     CH = hour
  3327.     CL = minute
  3328.     DH = second
  3329.     DL unused
  3330. Return: AX = 0000h successful
  3331.        < 0       error code (see AX=CB01h)
  3332. Note:    setting a task's date and time to before the current date and time
  3333.       causes it to execute immediately
  3334. SeeAlso: AX=CB0Bh,CB0Ch,CB10h
  3335. ---------------------------------------------
  3336. INT 2F - Multiplex - Communicating Applications Spec - GET EXTERNAL DATA BLOCK
  3337.     AX = CB0Eh
  3338.     DS:DX -> 256-byte buffer
  3339. Return: AX = 0000h successful
  3340.         buffer filled
  3341.        < 0       error code (see AX=CB01h)
  3342.  
  3343. Format of external data block:
  3344. Offset    Size    Description
  3345.  00h    BYTE    CAS major version
  3346.  01h    BYTE    CAS minor version
  3347.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  3348.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  3349.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  3350.  60h 32 BYTEs    ASCIZ default sender name
  3351.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  3352.  95h 107 BYTEs    reserved
  3353. ---------------------------------------------
  3354. INT 2F - Multiplex - Communicating Applications Spec - GET/SET AUTORECEIVE
  3355.     AX = CB0Fh
  3356.     DL = subfunction
  3357.         00h get current autoreceive state
  3358.         01h set autoreceive state
  3359.         DH = number of rings before answer, 00h = never
  3360. Return: AX = 0000h autoreceive disabled
  3361.        = N       number of rings before answer
  3362.        < 0       error code (see AX=CB01h)
  3363. ---------------------------------------------
  3364. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT STATUS
  3365.     AX = CB10h
  3366.     DS:DX -> 511-byte buffer
  3367. Return: AX = 0000h successful
  3368.         BX = event handle of current event
  3369.         buffer filled
  3370.        < 0       error code (see AX=CB01h)
  3371. SeeAlso: AX=CB02h,CB0Dh
  3372.  
  3373. Format of status area:
  3374. Offset    Size    Description
  3375.  00h    BYTE    event type
  3376.         00h send
  3377.         01h receive
  3378.         02h polled send
  3379.         03h polled receive
  3380.         04h to 7Fh reserved
  3381.         FFh serious hardware error
  3382.  01h    BYTE    transfer type
  3383.         00h 200x200 dpi, FAX mode
  3384.         01h 100x200 dpi, FAX mode
  3385.         02h file transfer mode
  3386.         03h to 7Fh reserved
  3387.  02h    WORD    event status 
  3388.         0000h completed successfully
  3389.         0001h waiting
  3390.         0002h number dialed
  3391.         0003h connected, sending
  3392.         0004h connected, receiving
  3393.         0005h aborted
  3394.         0006h to 007Fh reserved
  3395.         0080h to 7FFFh application-specific events
  3396.         8000h to FFFFh error codes
  3397.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  3398.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  3399.  08h    WORD    number of files to transfer, max 7FFFh
  3400.  0Ah    WORD    offset of file transfer record
  3401.  0Ch 47 BYTEs    ASCIZ phone number to call
  3402.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  3403.  7Bh    BYTE    reserved (00h)
  3404.  7Ch    BYTE    connect time, seconds
  3405.  7Dh    BYTE    connect time, minutes
  3406.  7Eh    BYTE    connect time, hours
  3407.  7Fh    DWORD    total number of pages in all files
  3408.  83h    DWORD    pages already transmitted 
  3409.  87h    WORD    number of files already transmitted
  3410.  89h    BYTE    cover page flag
  3411.         00h don't transmit cover page
  3412.         01h transmit cover page
  3413.         02h to 7Fh reserved
  3414.  8Ah    WORD    total number of transmission errors
  3415.  8Ch 78 BYTEs    reserved (zeros)
  3416.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  3417.  EFH 32 BYTEs    ASCIZ destination name
  3418. 10Fh 32 BYTEs    ASCIZ sender name
  3419. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  3420. 17Fh 128 BYTEs    file transfer record for current event (see below)
  3421.  
  3422. Format of file transfer record:
  3423. Offset    Size    Description
  3424.  00h    BYTE    file type (ignored unless FAX)
  3425.         00h ASCII
  3426.         01h PCX
  3427.         02h DCX
  3428.         03h to 7Fh reserved
  3429.  01h    BYTE    text size for ASCII FAX file
  3430.         00h = 80 columns by 66 lines (11 inches)
  3431.         01h = 132 columns by 88 lines (11 inches)
  3432.         02h to 7Fh reserved
  3433.  02h    BYTE    status of file
  3434.         00h untouched
  3435.         01h opened
  3436.         02h moved
  3437.         03h deleted
  3438.         04h not yet received
  3439.         05h to 7Fh reserved
  3440.  03h    DWORD    bytes already transmitted
  3441.  07h    DWORD    file size in bytes
  3442.  0Bh    WORD    pages alread transmitted
  3443.  0Dh    WORD    number of pages in file
  3444.  0Fh 80 BYTEs    ASCIZ filename
  3445.  5Fh    BYTE    1/8 inch page length
  3446.         if page length below set to 01h through 7Fh, this value 
  3447.         specifies additional 1/8 inch increments to page length
  3448.  60h    BYTE    page length
  3449.         00h = 11 inches
  3450.         01h to 7Fh = page length is this number of inches plus value of
  3451.             1/8 inch field above
  3452.         80h to FEh reserved
  3453.         FFh = ASCII pages ending with formfeed
  3454.  61h 31 BYTEs    reserved (zeros)
  3455. ---------------------------------------------
  3456. INT 2F - Multiplex - Communicating Applications Spec - GET QUEUE STATUS
  3457.     AX = CB11h
  3458.     DL = queue to get status of
  3459.         00h task queue
  3460.         01h receive queue
  3461.         02h log queue
  3462. Return: AX >= 0  total number of changes made to queue, modulo 32768
  3463.         BX = number of control files currently in queue
  3464.         CX = number of received files (zero for task and log queues)
  3465.        < 0     error code (see AX=CB01h)
  3466. SeeAlso: AX=CB12h
  3467. ---------------------------------------------
  3468. INT 2F - Multiplex - Communicating Applications Spec - GET HARDWARE STATUS
  3469.     AX = CB12h
  3470.     DS:DX -> 128-byte status buffer
  3471. Return: AX = 0000h successful
  3472.         buffer filled with hardware-dependent status information
  3473.        < 0       error code (see AX=CB01h)
  3474. SeeAlso: AX=CB11h
  3475.  
  3476. Format of status buffer for Intel Connection CoProcessor:
  3477. Offset    Size    Description
  3478.  00h    BYTE    bit flags
  3479.         bit 7: hardware busy sending or receiving
  3480.         bit 6: last page of data
  3481.         bit 5: no data on current page
  3482.         bit 4: retransmit request for current page being transmitted
  3483.         bit 3: NSF mode active
  3484.         bits 2-0: reserved
  3485.  01h    BYTE    number of kilobytes of free buffer space
  3486.  02h    BYTE    page buffer status
  3487.         bit 7: Connection CoProcessor has documents to send
  3488.         bits 6-0: number of pages in buffer
  3489.  03h    BYTE    number of retries left for dialing number
  3490.  04h    BYTE    page number to retransmit
  3491.  05h    BYTE    communications status
  3492.         bit 7: originating call
  3493.         bit 6: FAX message to be sent
  3494.         bit 5: on line
  3495.         bit 4: ring detected and receive enabled
  3496.         bit 3: buffer dumped on receive
  3497.         bits 2-0: hardware sequence state
  3498.             000 idle
  3499.             001 dial
  3500.             010 answer
  3501.             011 transmit
  3502.             100 receive
  3503.             101 pre-message
  3504.             110 post-message
  3505.             111 disconnect
  3506.  06h    BYTE    baud rate
  3507.         bit 7: reserved
  3508.         bits 6-4: baud rate
  3509.             000 = 300 baud (SDLC mode)
  3510.             100 = 2400 baud
  3511.             101 = 4800 baud
  3512.             110 = 7200 baud
  3513.             111 = 9600 baud
  3514.         bits 3-0: reserved, should be 0110
  3515.  07h  3 BYTEs    reserved
  3516.  0Ah    BYTE    hardware status
  3517.         bit 7: modem option installed
  3518.         bit 6: Connection CoProcessor has control of DAA (not latched)
  3519.         bit 5: on line (not latched)
  3520.         bit 4: ring detected (not latched)
  3521.         bit 3: data in command buffer (not latched)
  3522.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  3523.         bit 1: line length compensation bit 1 set (not latched)
  3524.         bit 0: line length compensation bit 0 set (not latched)
  3525.  0Bh    BYTE    switch states
  3526.         bit 7: reserved
  3527.         bit 6: unused
  3528.         bit 5: spare switch open
  3529.         bit 4: FAX ADR1 switch open
  3530.         bit 3: FAX ADR0 switch open
  3531.         bit 2: alternate interrupt switch open
  3532.         bit 1: COM SEL 1 switch open
  3533.         bit 0: COM SEL 0 switch open
  3534.  0Ch    BYTE    bit flags
  3535.         bit 7: reserved
  3536.         bit 6: auxiliary relay forced ON
  3537.         bit 5: modem select relay forced ON
  3538.         bit 4: offhook relay forced ON
  3539.         bit 3: 9600 bps enabled
  3540.         bit 2: 7200 bps enabled
  3541.         bit 1: 4800 bps enabled
  3542.         bit 0: 2400 bps enabled
  3543.  0Dh    BYTE    reserved
  3544.  0Eh    WORD    error count
  3545.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  3546.  14h 10 BYTEs    reserved
  3547.  1Eh 21 BYTEs    ASCIZ CCITT identification
  3548.  33h 77 BYTEs    reserved
  3549. ---------------------------------------------
  3550. INT 2F - Multiplex - Communicating Applications Spec - GET DIAGNOSTICS RESULTS
  3551.     AX = CB13h
  3552.     DL = 00h
  3553. Return: AX = 0040h in progress
  3554.        > 0       passed
  3555.        < 0       failure code
  3556. Note:    diagnostics return values are hardware dependent
  3557. SeeAlso: AX=CB13h/DL=01h
  3558.  
  3559. Intel Connection CoProcessor failure codes:
  3560.     bit 3: 9600 bps FAX modem module failed
  3561.     bit 2: SDLC chip failed
  3562.     bit 1: RAM failed
  3563.     bit 0: ROM checksum failed
  3564. ---------------------------------------------
  3565. INT 2F - Multiplex - Communicating Applications Spec - START DIAGNOSTICS
  3566.     AX = CB13h
  3567.     DL = 01h
  3568. Return: AX = 0000h successfully started
  3569.        < 0       error code (see AX=CB01h)
  3570. SeeAlso: AX=CB13h/DL=00h
  3571. ---------------------------------------------
  3572. INT 2F - Multiplex - Communicating Applications Spec - MOVE RECEIVED FILE
  3573.     AX = CB14h
  3574.     BX = event handle
  3575.     CX = receive file number
  3576.          0001h first received file
  3577.          N       Nth received file
  3578.     DS:DX -> ASCIZ string specifying new name for file
  3579. Return: AX = 0000h successful
  3580.        < 0       error code (see AX=CB01h)
  3581. ---------------------------------------------
  3582. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT FILE TO SEND
  3583.     AX = CB15h
  3584.     DS:DX -> variable-length data area
  3585. Return: AX >= 0    event handle
  3586.        < 0    error code (see AX=CB01h)
  3587.  
  3588. Format of data area:
  3589. Offset    Size    Description
  3590.  00h    BYTE    transfer type
  3591.         00h = 200x200 dpi, fax mode
  3592.         01h = 100x200 dpi, fax mode
  3593.         02h = file transfer mode
  3594.         03h to 7Fh reserved
  3595.  01h    BYTE    text size
  3596.         00h = 80 columns
  3597.         01h = 132 columns
  3598.         02h to 7Fh reserved
  3599.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  3600.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  3601.  06h 32 BYTEs    ASCIZ destination name
  3602.  26h 80 BYTEs    ASCIZ name of file to send
  3603.  76h 47 BYTEs    ASCIZ phone number to dial
  3604.  A5h 64 BYTEs    ASCIZ application-specific tag string
  3605.  E5h    BYTE    reserved (00h)
  3606.  E6h    BYTE    cover page
  3607.         00h don't send cover page
  3608.         01h send cover page
  3609.         02h to 7Fh reserved
  3610.  E7h 23 BYTEs    reserved (zeros)
  3611.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  3612.         set to 01h)
  3613. ---------------------------------------------
  3614. INT 2F - Multiplex - Intel Image Processing Interface - INSTALLATION CHECK
  3615.     AX = CD00h
  3616. Return: AL = 00h not installed, OK to install
  3617.          01h not installed, not OK to install
  3618.          FFh installed
  3619. ---------------------------------------------
  3620. INT 2F - Multiplex - SWELL.EXE - INSTALLATION CHECK
  3621.     AX = CD00h
  3622. Return: AX = 00FFh installed
  3623.         BH = major version
  3624.         BL = minor version
  3625. Note:    SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  3626.       process with INT 21/AH=4Bh
  3627. ---------------------------------------------
  3628. INT 2F - Multiplex - Intel Image Processing Interface - SET DEVICE NAME
  3629.     AX = CD01h
  3630.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  3631. Return: AL = 00h successful
  3632.         CX:BX -> internal character device name
  3633.        = 80h error
  3634. ---------------------------------------------
  3635. INT 2F - Multiplex - SWELL.EXE - SUSPEND ONCE
  3636.     AX = CD01h
  3637. Return: AX = 0000h
  3638. SeeAlso: AX=CD02h"SWELL"
  3639. ---------------------------------------------
  3640. INT 2F - Multiplex - Intel Image Processing Interface - GET VERSION NUMBER
  3641.     AX = CD02h
  3642. Return: AL = 00h/01h successful
  3643.         BH = major version number (BCD)
  3644.         BL = minor version number (BCD)
  3645.        = 80h error
  3646. Note:    if return AL = 01h, the IPI supports network redirection
  3647. ---------------------------------------------
  3648. INT 2F - Multiplex - SWELL.EXE - SUSPEND
  3649.     AX = CD02h
  3650. Return: AX = 0000h
  3651. SeeAlso: AX=CD03h"SWELL"
  3652. ---------------------------------------------
  3653. INT 2F - Multiplex - Intel Image Processing Interface - SELECT SCAN LINE
  3654.     AX = CD03h
  3655.     BX = scan line
  3656.     CX = requested density in dots per inch (300, 600, or 1200)
  3657. Return: AL = 00h succesful
  3658.         CX = density at which scan line was mapped
  3659.         ES:DI -> start of scan line
  3660.     AL = 80h unsuccessful
  3661.        = 81h scan line out of range
  3662.        = 82h unsupported scan line density
  3663.        = 83h out of memory
  3664. ---------------------------------------------
  3665. INT 2F - Multiplex - SWELL.EXE - ACTIVATE
  3666.     AX = CD03h
  3667. Return: AX = 0000h
  3668. SeeAlso: AX=CD02h"SWELL"
  3669. ---------------------------------------------
  3670. INT 2F - Multiplex - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  3671.     AX = CD04h
  3672.     CX:BX -> structure (see below)
  3673. Return: AL = 00h successful
  3674.        = 80h unsuccessful
  3675.        = 81h scan line out of range
  3676.        = 82h unsupported scan line density
  3677.        = 83h out of memory
  3678.        = 84h unrecognized source
  3679.        = 85h initialization error
  3680.  
  3681. Format of structure:
  3682. Offset    Size    Description
  3683.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  3684.  02h    DWORD    pointer to image data
  3685.  06h    WORD    scan line on which to place
  3686.  08h    WORD    bit offset from start of scan line at which to place
  3687.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  3688.  0Ch    WORD    width in bits of data
  3689.  0Eh    WORD    source logical page number
  3690.  10h    WORD    source handle (only if source in expanded memory)
  3691.  12h    WORD    source offset (only if source in expanded memory)
  3692. ---------------------------------------------
  3693. INT 2F - Multiplex - SWELL.EXE - TURN OFF VERBOSE MODE
  3694.     AX = CD04h
  3695. Return: AX = 0000h
  3696. SeeAlso: AX=CD05h"SWELL"
  3697. ---------------------------------------------
  3698. INT 2F - Multiplex - Intel Image Processing Interface - PRINT PAGE
  3699.     AX = CD05h
  3700. Return: AL = 00h successful
  3701.        = 80h unsuccessful
  3702. Note:    page image is retained, so multiple calls will print multiple copies of
  3703.       the page
  3704. ---------------------------------------------
  3705. INT 2F - Multiplex - SWELL.EXE - TURN ON VERBOSE MODE
  3706.     AX = CD05h
  3707. Return: AX = 0000h
  3708. SeeAlso: AX=CD04h"SWELL"
  3709. ---------------------------------------------
  3710. INT 2F - Multiplex - Intel Image Processing Interface - CLEAR PAGE
  3711.     AX = CD06h
  3712. Return: AL = 00h successful
  3713.        = 80h unsuccessful
  3714. Note:    palette is reset to default
  3715. ---------------------------------------------
  3716. INT 2F - Multiplex - SWELL.EXE - UNINSTALL
  3717.     AX = CD06h
  3718. Return: AX = 0000h uninstalled
  3719.        = 8002h programs still swapped, not uninstalled
  3720. ---------------------------------------------
  3721. INT 2F - Multiplex - Intel Image Processing Interface - reserved
  3722.     AX = CD07h
  3723. ---------------------------------------------
  3724. INT 2F - Multiplex - SWELL.EXE - GET INFO
  3725.     AX = CD07h
  3726.     ES:BX -> 32-byte buffer for info
  3727. Return: AX = 0000h successful
  3728.         ES:BX buffer filled
  3729.        = 8001h buffer wrong size
  3730.  
  3731. Format of info buffer:
  3732. Offset    Size    Description
  3733.  00h    WORD    20h  (total size of buffer)
  3734.  02h    BYTE    suspend-once mode active if nonzero
  3735.  03h    BYTE    00h active, 01h suspended
  3736.  04h    BYTE    00h quiet, 01h verbose
  3737.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  3738.  06h 26 BYTEs    unused???
  3739. ---------------------------------------------
  3740. INT 2F - Multiplex - Intel Image Processing Interface - SCREEN IMAGE
  3741.     AX = CD08h
  3742.     CX:BX -> structure (see below)
  3743. Return: AL = 00h successful
  3744.        = 80h unsuccessful
  3745.        = 81h scan line out of range
  3746.        = 82h unsupported scan line density
  3747.        = 83h out of memory
  3748.        = 84h unrecognized source
  3749.        = 85h initialization error
  3750.  
  3751. Format of structure:
  3752. Offset    Size    Description
  3753.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  3754.  02h    DWORD    pointer to image data
  3755.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  3756.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  3757.  0Ah    WORD    left cropping (currently must be zero)
  3758.  0Ch    WORD    top cropping (currently must be zero)
  3759.  0Eh    WORD    width (currently must be 8000h)
  3760.  10h    WORD    height (currently must be 8000h)
  3761.  12h    WORD    horizontal size of image in 1200 dpi units
  3762.  14h    WORD    vertical size of image in 1200 dpi units
  3763.  16h    WORD    aspect ratio (currently reserved)
  3764.  18h    WORD    initialization flag (if 01h, initialization is performed)
  3765.  1Ah    WORD    pixels per line of source data
  3766.  1Ch    WORD    number of scan lines in source data
  3767.  1Eh    WORD    number of scan lines in packet
  3768.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  3769.  22h    WORD    pixels per byte (1,2,4, or 8)
  3770.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  3771.  26h    WORD    source page number (if in expanded memory)
  3772.  28h    WORD    source handle (if in expanded memory)
  3773.  2Ah    WORD    source offset (if in expanded memory)
  3774. ---------------------------------------------
  3775. INT 2F - Multiplex - SWELL.EXE - UNUSED
  3776.     AX = CD08h
  3777. Return: AX = FFFFh (error)
  3778. ---------------------------------------------
  3779. INT 2F - Multiplex - Intel Image Processing Interface - LOAD SCREEN
  3780.     AX = CD09h
  3781.     CX:BX -> structure (see below)
  3782. Return: AL = 00h successful
  3783.        = 80h unsuccessful
  3784. SeeAlso: AX=CD0Ah"Image Processing"
  3785.  
  3786. Format of structure:
  3787. Offset    Size    Description
  3788.  00h    BYTE    style
  3789.         44h ('D') diamond style
  3790.         4Ch ('L') line style
  3791.  01h    BYTE    reserved (00h)
  3792.  02h    WORD    frequency in lines per inch [sic]
  3793.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  3794.  04h    WORD    screen angle in degrees (-360 to 360)
  3795.         currently coerced to nearest of -45, 0, 45, or 90
  3796. ---------------------------------------------
  3797. INT 2F - Multiplex - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  3798.     AX = CD09h
  3799. Return: AX = 0000h
  3800. SeeAlso: AX=CD0Ah"SWELL"
  3801. ---------------------------------------------
  3802. INT 2F - Multiplex - Intel Image Processing Interface - LOAD PALETTE
  3803.     AX = CD0Ah
  3804.     CX:BX -> palette structure (see below)
  3805. Return: AL = 00h successful
  3806.        = 80h unsuccessful
  3807. SeeAlso: AX=CD09h"Image Processing"
  3808.  
  3809. Format of palette structure:
  3810. Offset    Size    Description
  3811.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  3812.  01h    2**N    palette translation values, one per possible pixel value
  3813. ---------------------------------------------
  3814. INT 2F - Multiplex - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  3815.     AX = CD0Ah
  3816. Return: AX = 0000h
  3817. SeeAlso: AX=CD09h"SWELL"
  3818. ---------------------------------------------
  3819. INT 2F - Multiplex - 4DOS.COM v2.1+
  3820.     AX = D44Dh
  3821.     BH = function
  3822.         00h installation check
  3823.         Return: AX = 44DDh
  3824.             BL = minor version number
  3825.             BH = major version number
  3826.             CX = PSP segment address for current invocation
  3827.             DL = 4DOS shell number (0 for the first (root) shell,
  3828.                  updated each time a new copy is loaded)
  3829.         01h (internal) terminate current copy of 4DOS
  3830.         02h ???
  3831.         DX = ???
  3832.         03h EXEC program
  3833.         CX:DX -> EXEC record
  3834.         FEh deallocate shell number (passed through to root shell)
  3835.         ???
  3836.         FFh allocate shell number (passed through to root shell)
  3837. Note:    bug in v3.00 will crash system if unrecognized value in BH
  3838.  
  3839. Format of EXEC record:
  3840. Offset    Size    Description
  3841.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  3842.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  3843.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  3844. ---------------------------------------------
  3845. INT 2F - Multiplex - 4DOS.COM v3.0 - AWAITING USER INPUT
  3846.     AX = D44Eh
  3847. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  3848. Note:    called by 4DOS immediately after displaying the prompt and before
  3849.       accepting user input
  3850. ---------------------------------------------
  3851. INT 2F - Multiplex - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  3852.     AX = D701h
  3853. Return: AX = 0000h installed
  3854.         BX = interrupt number (60h to 66h)
  3855.        nonzero not present
  3856. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  3857.       necessary to examine the four bytes preceding the handlers for
  3858.       INT 60 through INT 66 for the string "BANV"
  3859. ---------------------------------------------
  3860. INT 2F - Multiplex - DESQview 2.26 External Dev Interface - INSTALLATION CHECK
  3861.     AX = DE00h
  3862.     BX = 4445h ("DE")
  3863.     CX = 5844h ("XD")
  3864.     DX = 4931h ("I1")
  3865. Return: AL = FFh if installed (even if other registers do not match)
  3866.     if BX,CX, and DX were as specified on entry,
  3867.         BX = 4845h
  3868.         CX = 5245h
  3869.         DX = 4456h ("DV")
  3870. ---------------------------------------------
  3871. INT 2F - Multiplex - DESQview 2.26 External Dev Itrface - DRIVER CUSTOM SUBFUNC
  3872.     AX = DE01h
  3873.     BX = driver ID
  3874.     other registers as needed by driver
  3875. Note:    XDI drivers should pass this call through to previous handler if ID
  3876.       does not match
  3877. ---------------------------------------------
  3878. INT 2F - Multiplex - DESQview 2.26 XMS XDI - ???
  3879.     AX = DE01h
  3880.     BX = FFFEh
  3881.     CX = 4D47h
  3882.     DX = 0052h
  3883. Return: AL = FFh
  3884.     DX = 584Dh
  3885. ---------------------------------------------
  3886. INT 2F - Multiplex - DESQview 2.26 XDI - DVTree DVTXDI.COM
  3887.     AX = DE01h
  3888.     BX = 7474h
  3889.     CL = function
  3890.         00h installation check
  3891.         Return: AL = FFh
  3892.         01h get process handle
  3893.         DX = keys on Open Window menu (DL = first, DH = second)
  3894.         Return: AX = process handle or 0000h if not running
  3895. Return: BX = 4F4Bh ("OK")
  3896.     DL = ???
  3897. Note:    DVTree is a shareware DOS shell/DESQview process manager by Mike Weaver
  3898. ---------------------------------------------
  3899. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV INIT COMPLETE
  3900.     AX = DE02h
  3901.     BX = mapping context of DESQview
  3902.     DX = handle of DESQview system task
  3903. SeeAlso: AX=DE03h
  3904. Note:    XDI drivers should pass all calls through to previous handler
  3905. ---------------------------------------------
  3906. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV TERMINATION
  3907.     AX = DE03h
  3908.     BX = mapping context of DESQview
  3909.     DX = handle of DESQview system task
  3910. SeeAlso: AX=DE02h
  3911. Note:    XDI drivers should pass all calls through to previous handler
  3912. ---------------------------------------------
  3913. INT 2F - Multiplex - DESQview 2.26 External Device Interface - ADD PROCESS
  3914.     AX = DE04h
  3915.     BX = mapping context of new process
  3916.     DX = handle of process
  3917. Return: nothing
  3918. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  3919.       (see below) from "common" memory to control access to XMS memory
  3920.     all DOS, BIOS, and DV API calls are valid in handler
  3921.     XDI drivers should pass all calls through to previous handler
  3922. SeeAlso: AX=DE05h
  3923.  
  3924. Format of XMS XDI structure:
  3925. Offset    Size    Description
  3926.  00h    DWORD    pointer to 10-byte record???
  3927.  04h    DWORD    pointer to next XMS XDI structure
  3928.  08h    WORD    mapping context
  3929.  0Ah    BYTE    ???
  3930.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  3931.         (FAR jump to next field)
  3932.  10h  6 BYTEs    FAR handler for XMS driver entry point
  3933.         (consists of a FAR CALL followed by RETF)
  3934. ---------------------------------------------
  3935. INT 2F - Multiplex - DESQview 2.26 External Device Interface - REMOVE PROCESS
  3936.     AX = DE05h
  3937.     BX = mapping context of process
  3938.     DX = handle of process
  3939. Return: nothing
  3940. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  3941.     XDI drivers should pass all calls through to previous handler
  3942. SeeAlso: AX=DE04h
  3943. ---------------------------------------------
  3944. INT 2F - Multiplex - DESQview 2.26 XDI - CREATE TASK
  3945.     AX = DE06h
  3946.     BX = mapping context of process containing task???
  3947.     DX = handle of task???
  3948. Note:    XDI drivers should pass all calls through to previous handler
  3949. ---------------------------------------------
  3950. INT 2F - Multiplex - DESQview 2.26 XDI - TERMINATE TASK
  3951.     AX = DE07h
  3952.     BX = mapping context of process containing task???
  3953.     DX = handle of task???
  3954. Note:    XDI drivers should pass all calls through to previous handler
  3955. ---------------------------------------------
  3956. INT 2F - Multiplex - DESQview 2.26 XDI - SAVE STATE
  3957.     AX = DE08h
  3958.     BX = mapping context of task being switched from
  3959.     DX = handle of task being switched from
  3960. Notes:    invoked prior to task swap, interrupts, etc
  3961.     XDI drivers should pass all calls through to previous handler
  3962. ---------------------------------------------
  3963. INT 2F - Multiplex - DESQview 2.26 XDI - RESTORE STATE
  3964.     AX = DE09h
  3965.     BX = mapping context of task being switched to
  3966.     DX = handle of task being switched to
  3967. Notes:    state is restored except for interrupts
  3968.     XDI drivers should pass all calls through to previous handler
  3969. ---------------------------------------------
  3970. INT 2F - Multiplex - DESQview 2.26 XDI - CHANGE KEYBOARD FOCUS
  3971.     AX = DE0Ah
  3972.     BX = mapping context of task receiving focus
  3973.     DX = handle of running task
  3974. Note:    XDI drivers should pass all calls through to previous handler
  3975. ---------------------------------------------
  3976. INT 2F - Multiplex - DESQview 2.26 XDI - DVP PROCESSING COMPLETE
  3977.     AX = DE0Bh
  3978.     BX = mapping context of DESQview system task
  3979.     CX = number of system memory paragraphs required for the use of all
  3980.         XDI drivers (DV will add this to system memory in DVP buffer)
  3981.     DX = handle of DESQview system task
  3982.     SI = mapping context of new process if it starts
  3983.     ES:DI -> DVP buffer
  3984. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  3985.     XDI drivers should pass all calls through to previous handler
  3986. ---------------------------------------------
  3987. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP OUT PROCESS
  3988.     AX = DE0Ch
  3989.     BX = mapping context of task being swapped out
  3990.     DX = handle of DESQview system task
  3991. Note:    XDI drivers should pass all calls through to previous handler
  3992. ---------------------------------------------
  3993. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP IN PROCESS
  3994.     AX = DE0Dh
  3995.     BX = mapping context of process just swapped in
  3996.     DX = handle of DESQview system task
  3997. Note:    XDI drivers should pass all calls through to previous handler
  3998. ---------------------------------------------
  3999. INT 2F - Multiplex - DESQview 2.26 XDI - DVP START FAILED
  4000.     AX = DE0Eh
  4001.     BX = mapping context of DESQview system task
  4002.     DX = handle of DESQview system task
  4003.     SI = mapping context of failed process
  4004. Note:    XDI drivers should pass all calls through to previous handler
  4005. ---------------------------------------------
  4006. INT 2F - Multiplex - ANARKEY.COM - INSTALLATION CHECK
  4007.     AX = E300h
  4008. Return: AL = 00h not installed
  4009.          FEh if installed but suspended (v3.0+)
  4010.          FFh installed
  4011. Notes:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4012.     E3h is the default function number, but can be set to any value from
  4013.       C0h to FFh.
  4014. ---------------------------------------------
  4015. INT 2F - Multiplex - ANARKEY.COM v2+ - GET ???
  4016.     AX = E301h
  4017. Return: DX:BX -> ???
  4018. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4019.  
  4020. Format of returned data structure for ANARKEY v2.0:
  4021. Offset    Size    Description
  4022.  -7   7 BYTEs    signature ('ANARKEY')
  4023.  00h    WORD    ??? (I see 0001h in v2.0)
  4024.  02h    WORD    ??? (I see 0001h in v2.0)
  4025.  04h    WORD    ??? (I see 0 in v2.0)
  4026.  06h    WORD    PSP segment of next program loaded
  4027.  
  4028. Format of returned data structure for ANARKEY v3.0:
  4029. Offset    Size    Description
  4030.  -1    BYTE    multiplex number
  4031.  00h    WORD    ??? (I see 0001h in v3.0)
  4032.  02h    WORD    ??? (I see 0001h in v3.0)
  4033.  04h    BYTE    ??? (I see 0 in v3.0)
  4034.  05h    WORD    PSP segment of next program loaded
  4035. ---------------------------------------------
  4036. INT 2F - Multiplex - ANARKEY.COM v3.0 - ???
  4037.     AX = E302h
  4038.     BL = ???
  4039. Return: ???
  4040. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4041. ---------------------------------------------
  4042. INT 2F - Multiplex - ANARKEY.COM v3.0 - ANARKMD API
  4043.     AX = E303h
  4044.     BL = function
  4045.         01h  toggle insert mode
  4046.         02h  display contents of history buffer
  4047.         03h  write history buffer to file
  4048.         ES:DX -> file name
  4049.         04h  clear history buffer
  4050.         05h  undefine all aliases
  4051.         06h  show aliases
  4052.         07h     list programs using Unix switchar
  4053.         08h     jump to bottom of history buffer    
  4054. Return: ???
  4055. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4056. ---------------------------------------------
  4057. INT 2F - Multiplex - ANARKEY.COM v2.0 - ???
  4058.     AX = E304h
  4059.     BL = ???
  4060. Return: ???
  4061. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4062. ---------------------------------------------
  4063. INT 2F - Multiplex - ANARKEY.COM v3.0 - SUSPEND ANARKEY
  4064.     AX = E305h
  4065.     BL = 01h suspend
  4066.          00h enable
  4067. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  4068. ---------------------------------------------
  4069. INT 2F - Multiplex - AUTOPARK.COM - INSTALLATION CHECK
  4070.     AX = F700h
  4071. Return: AL = 00h not installed
  4072.          FFh installed
  4073. Note:    AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  4074. ---------------------------------------------
  4075. INT 2F - Multiplex - AUTOPARK.COM - SET PARKING DELAY
  4076.     AX = F701h
  4077.     BX:CX = 32 bit count of 55ms timer ticks
  4078. ---------------------------------------------
  4079. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  4080.     AH = FBh
  4081. ---------------------------------------------
  4082. INT 2F - Multiplex - Borland DPMI LOADER
  4083.     AX = FB42h
  4084.     details not yet available
  4085. ---------------------------------------------
  4086. INT 30 - (NOT A VECTOR!) FAR JMP instruction for CP/M-style calls
  4087.    the CALL 5 entry point does a FAR jump to here
  4088. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  4089.       memory
  4090. SeeAlso: INT 21/AH=26h
  4091. ---------------------------------------------
  4092. INT 31 - overwritten by CP/M jump instruction in INT 30
  4093. ---------------------------------------------
  4094. INT 31 - DOS Prot-Mode Interface 0.9 API - protected mode - ALLOCATE LDT DESCRS
  4095.     AX = 0000h
  4096.     CX = number of descriptors to allocate
  4097. Return: CF set on error
  4098.     CF clear if successful
  4099.         AX = base selector
  4100. Notes:    the base and limit of the returned descriptors will be 0
  4101.     add the value returned by INT 31/AX=0003h to move to subsequent
  4102.       descriptors if multiple descriptors were allocated
  4103. SeeAlso: AX=0001h,AX=000Dh
  4104. ---------------------------------------------
  4105. INT 31 - DPMI 0.9 API - protected mode - FREE LDT DESCRIPTOR
  4106.     AX = 0001h
  4107.     BX = selector to free
  4108. Return: CF set on error
  4109.     CF clear if successful
  4110. Notes:    only one descriptor is freed per call
  4111.     the program's initial CS, DS, and SS descriptors may be freed
  4112. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh
  4113. ---------------------------------------------
  4114. INT 31 - DPMI 0.9 API - protected mode - SEGMENT TO DESCRIPTOR
  4115.     AX = 0002h
  4116.     BX = real mode segment
  4117. Return: CF set on error
  4118.     CF clear if successful
  4119.         AX = selector corresponding to real mode segment (64K limit)
  4120. Notes:    multiple calls for the same real mode segment return the same selector
  4121.     the returned descriptor should never be modified or freed
  4122. ---------------------------------------------
  4123. INT 31 - DPMI 0.9 API - protected mode - GET NEXT SELECTOR INCREMENT VALUE
  4124.     AX = 0003h
  4125. Return: CF clear
  4126.         AX = value to add to get next sequential selector
  4127. Note:    the increment will be a power of two
  4128. ---------------------------------------------
  4129. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4130.     AX = 0004h
  4131. ---------------------------------------------
  4132. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4133.     AX = 0005h
  4134. ---------------------------------------------
  4135. INT 31 - DPMI 0.9 API - protected mode - GET SEGMENT BASE ADDRESS
  4136.     AX = 0006h
  4137.     BX = selector
  4138. Return: CF set on error
  4139.     CF clear if successful
  4140.         CX:DX = linear base address of segment
  4141. SeeAlso: AX=0007h
  4142. ---------------------------------------------
  4143. INT 31 - DPMI 0.9 API - protected mode - SET SEGMENT BASE ADDRESS
  4144.     AX = 0007h
  4145.     BX = selector
  4146.     CX:DX = linear base address
  4147. Return: CF set on error
  4148.     CF clear if successful
  4149. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  4150.     only the low 24 bits of the address will be used by 16-bit DPMI
  4151.       implementations even on a 386 or higher
  4152. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch
  4153. ---------------------------------------------
  4154. INT 31 - DPMI 0.9 API - protected mode - SET SEGMENT LIMIT
  4155.     AX = 0008h
  4156.     BX = selector
  4157.     CX:DX = segment limit
  4158. Return: CF set on error
  4159.     CF clear if successful
  4160. Notes:    CX must be zero for 16-bit DPMI implementations
  4161.     limits greater than 1MB must be page aligned (low 12 bits set)
  4162.     only modify descriptors allocated with INT 31/AX=0000h
  4163. SeeAlso: AX=0007h,AX=0009h,AX=000Ch
  4164. ---------------------------------------------
  4165. INT 31 - DPMI 0.9 API - protected mode - SET DESCRIPTOR ACCESS RIGHTS
  4166.     AX = 0009h
  4167.     BX = selector
  4168.     CL = access rights/type byte
  4169.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  4170. Return: CF set on error
  4171.     CF clear if successful
  4172. SeeAlso: AX=0007h,AX=0008h,AX=000Ch
  4173. ---------------------------------------------
  4174. INT 31 - DPMI 0.9 API - protected mode - CREATE CODE SEGMENT ALIAS DESCRIPTOR
  4175.     AX = 000Ah
  4176.     BX = code segment selector
  4177. Return: CF set on error
  4178.     CF clear if successful
  4179.         AX = new data selector
  4180. Notes:    fails if selector in BX is not a code segment or is invalid
  4181.     use INT 31/AX=0001h to free new selector
  4182.     future changes to the code segment will not be reflected in the data
  4183.       segment
  4184. SeeAlso: AX=0001h
  4185. ---------------------------------------------
  4186. INT 31 - DPMI 0.9 API - protected mode - GET DESCRIPTOR
  4187.     AX = 000Bh
  4188.     BX = selector
  4189.     ES:DI / ES:EDI -> 8-byte buffer for copy of descriptor
  4190. Return: CF set on error
  4191.     CF clear if successful
  4192. Note:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4193. SeeAlso: AX=000Ch
  4194. ---------------------------------------------
  4195. INT 31 - DPMI 0.9 API - protected mode - SET DESCRIPTOR
  4196.     AX = 000Ch
  4197.     BX = selector
  4198.     ES:DI / ES:EDI -> 8-byte buffer containing descriptor
  4199. Return: CF set on error
  4200.     CF clear if successful
  4201. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  4202.     only modify descriptors allocated with INT 31/AX=0000h
  4203. SeeAlso: AX=000Bh
  4204. ---------------------------------------------
  4205. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE SPECIFIC LDT DESCRIPTOR
  4206.     AX = 000Dh
  4207.     BX = selector
  4208. Return: CF set on error
  4209.     CF clear if successful
  4210.         descriptor allocated
  4211. Notes:    free descriptor with INT 31/AX=0001h
  4212.     16 descriptors are reserved for this function, but some may already be
  4213.       in use by other applications
  4214. SeeAlso: AX=0000h,AX=0001h
  4215. ---------------------------------------------
  4216. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE DOS MEMORY BLOCK
  4217.     AX = 0100h
  4218.     BX = number of paragraphs to allocate
  4219. Return: CF set on error
  4220.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  4221.         BX = size (in paragraphs) of largest available block
  4222.     CF clear if successful
  4223.         AX = real mode segment of allocated block
  4224.         DX = first selector for allocated block
  4225. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  4226.     never modify or deallocate returned descriptors
  4227. SeeAlso: AX=0101h,AX=0501h
  4228. ---------------------------------------------
  4229. INT 31 - DPMI 0.9 API - protected mode - FREE DOS MEMORY BLOCK
  4230.     AX = 0101h
  4231.     DX = selector of block
  4232. Return: CF set on error
  4233.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  4234.     CF set if successful
  4235. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  4236. Note:    all descriptors allocated for the block are automatically freed
  4237. ---------------------------------------------
  4238. INT 31 - DPMI 0.9 API - protected mode - RESIZE DOS MEMORY BLOCK
  4239.     AX = 0102h
  4240.     BX = new block size in paragraphs
  4241.     DX = selector of block
  4242. Return: CF set on error
  4243.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  4244.         BX = maximum block size (in paragraphs) possible
  4245.     CF clear if successful
  4246. Notes:    increasing the size of a block past a 64K boundary will fail if the
  4247.       next descriptor in the LDT is already in use
  4248.     shrinking a block past a 64K boundary will cause some selectors to be
  4249.       freed
  4250. SeeAlso: AX=0100h
  4251. ---------------------------------------------
  4252. INT 31 - DPMI 0.9 API - protected mode - GET REAL MODE INTERRUPT VECTOR
  4253.     AX = 0200h
  4254.     BL = interrupt number
  4255. Return: CF clear
  4256.     CX:DX = segment:offset of real mode interrupt handler
  4257. Note:    the DPMI implementation is required to support all 256 vectors
  4258. SeeAlso: AX=0201h,AX=0204h
  4259. ---------------------------------------------
  4260. INT 31 - DPMI 0.9 API - protected mode - SET REAL MODE INTERRUPT VECTOR
  4261.     AX = 0201h
  4262.     BL = interrupt number
  4263.     CX:DX = segment:offset of real mode handler
  4264. Return: CF set on error
  4265.     CF clear if successful
  4266. Note:    all memory that may be touched by a hardware interrupt handler must be
  4267.       locked down with INT 31/AX=0600h    
  4268. SeeAlso: AX=0200h,AX=0205h,AX=0600h
  4269. ---------------------------------------------
  4270. INT 31 - DPMI 0.9 API - protected mode - GET PROCESSOR EXCEPTION HANDLER VECTOR
  4271.     AX = 0202h
  4272.     BL = exception number (00h-1Fh)
  4273. Return: CF set on error
  4274.     CF clear if successful
  4275.         CX:DX / CX:EDX = selector:offset of handler
  4276. Note:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  4277. SeeAlso: AX=0203h
  4278. ---------------------------------------------
  4279. INT 31 - DPMI 0.9 API - protected mode - SET PROCESSOR EXCEPTION HANDLER VECTOR
  4280.     AX = 0203h
  4281.     BL = exception number (00h-1Fh)
  4282.     CX:DX / CX:EDX = selector:offset of handler
  4283. Return: CF set on error
  4284.     CF clear if successful
  4285. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  4286.       stack frame on chaining to the next exception handler
  4287.     the handler should return using a FAR return
  4288.     all fault stack frames contain an error code, but it is only valid for
  4289.       exceptions 08h and 0Ah-0Eh
  4290.     handlers will only be called if the exception occurs in protected mode
  4291.     the handler may change certain values on the stack frame (see below)
  4292. SeeAlso: AX=0202h
  4293.  
  4294. Format of stack frame for 16-bit programs: (offset from SS:SP)
  4295. Offset    Size    Description
  4296.  00h    DWORD    return CS:IP (do not change)
  4297.  04h    WORD    error code
  4298.  06h    DWORD    CS:IP of exception
  4299.  0Ah    WORD    flags
  4300.  0Ch    DWORD    SS:SP
  4301.  
  4302. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  4303. Offset    Size    Description
  4304.  00h    DWORD    return EIP (do not change)
  4305.  04h    WORD    return CS selector (do not change)
  4306.  06h    WORD    reserved (do not change)
  4307.  08h    DWORD    error code
  4308.  0Ch    DWORD    EIP of exception
  4309.  10h    WORD    CS selector of exception
  4310.  12h    WORD    reserved (do not change)
  4311.  14h    DWORD    EFLAGS
  4312.  18h    DWORD    ESP
  4313.  1Ch    WORD    SS
  4314.  1Eh    WORD    reserved (do not change)
  4315. ---------------------------------------------
  4316. INT 31 - DPMI 0.9 API - protected mode - GET PROTECTED MODE INTERRUPT VECTOR
  4317.     AX = 0204h
  4318.     BL = interrupt number
  4319. Return: CF set on error
  4320.     CF clear if successful
  4321.         CX:DX / CX:EDX = selector:offset of handler
  4322. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4323.     DPMI implementations are required to support all 256 vectors
  4324. SeeAlso: AX=0200h,AX=0205h
  4325. ---------------------------------------------
  4326. INT 31 - DPMI 0.9 API - protected mode - SET PROTECTED MODE INTERRUPT VECTOR
  4327.     AX = 0205h
  4328.     BL = interrupt number
  4329.     CX:DX / CX:EDX = selector:offset of handler
  4330. Return: CF set on error
  4331.     CF clear if successful
  4332. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  4333.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  4334.       to the next handler
  4335.     DPMI implementations are required to support all 256 vectors
  4336. ---------------------------------------------
  4337. INT 31 - DPMI 0.9 API - protected mode - SIMULATE REAL MODE INTERRUPT
  4338.     AX = 0300h
  4339.     BL = interrupt number
  4340.     BH = flags
  4341.         bit 0: reset the interrupt controller and A20 line
  4342.         others must be 0
  4343.     CX = number of words to copy from protected mode to real mode stack
  4344.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4345.             (see below)
  4346. Return: CF set on error
  4347.     CF clear if successful
  4348.         real mode call structure modified (all fields except SS:SP, CS:IP
  4349.           filled with return values from real mode interrupt)
  4350.     protected mode stack unchanged
  4351. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4352.     CS:IP in the real mode call structure is ignored for this call,
  4353.       instead, the indicated interrupt vector is used for the address
  4354.     the flags in the call structure are pushed on the real mode stack to
  4355.       form an interrupt stack frame, and the trace and interrupt flags are
  4356.       clear on entry to the handler
  4357.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4358.     the real mode handler must return with the stack in the same state as
  4359.       it was on being called
  4360. SeeAlso: AX=0302h
  4361.  
  4362. Format of real mode call structure:
  4363. Offset    Size    Description
  4364.  00h    DWORD    EDI
  4365.  04h    DWORD    ESI
  4366.  08h    DWORD    EBP
  4367.  0Ch    DWORD    reserved
  4368.  10h    DWORD    EBX
  4369.  14h    DWORD    EDX
  4370.  18h    DWORD    ECX
  4371.  1Ch    DWORD    EAX
  4372.  20h    WORD    flags
  4373.  22h    WORD    ES
  4374.  24h    WORD    DS
  4375.  26h    WORD    FS
  4376.  28h    WORD    GS
  4377.  2Ah    WORD    IP
  4378.  2Ch    WORD    CS
  4379.  2Eh    WORD    SP
  4380.  30h    WORD    SS
  4381. ---------------------------------------------
  4382. INT 31 - DPMI 0.9 API - protected mode - CALL REAL MODE PROC WITH FAR RET FRAME
  4383.     AX = 0301h
  4384.     BH = flags
  4385.         bit 0: reset the interrupt controller and A20 line
  4386.         others must be 0
  4387.     CX = number of words to copy from protected mode to real mode stack
  4388.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4389.             (see INT 31/AX=0300h)
  4390. Return: CF set on error
  4391.     CF clear if successful
  4392.         real mode call structure modified (all fields except SS:SP, CS:IP
  4393.           filled with return values from real mode interrupt)
  4394.     protected mode stack unchanged
  4395. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4396.     the real mode procedure must exit with a FAR return
  4397.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4398.     the real mode handler must return with the stack in the same state as
  4399.       it was on being called
  4400. SeeAlso: AX=0302h
  4401. ---------------------------------------------
  4402. INT 31 - DPMI 0.9 API - protected mode - CALL REAL MODE PROC WITH IRET FRAME
  4403.     AX = 0302h
  4404.     BH = flags
  4405.         bit 0: reset the interrupt controller and A20 line
  4406.         others must be 0
  4407.     CX = number of words to copy from protected mode to real mode stack
  4408.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4409.             (see INT 31/AX=0300h)
  4410. Return: CF set on error
  4411.     CF clear if successful
  4412.         real mode call structure modified (all fields except SS:SP, CS:IP
  4413.           filled with return values from real mode interrupt)
  4414.     protected mode stack unchanged
  4415. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  4416.     the flags in the call structure are pushed on the real mode stack to
  4417.       form an interrupt stack frame, and the trace and interrupt flags are
  4418.       clear on entry to the handler
  4419.     the real mode procedure must exit with an IRET
  4420.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  4421.     the real mode handler must return with the stack in the same state as
  4422.       it was on being called
  4423. SeeAlso: AX=0300h
  4424. ---------------------------------------------
  4425. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE REAL MODE CALL-BACK ADDRESS
  4426.     AX = 0303h
  4427.     DS:SI / DS:ESI = selector:offset of procedure to call
  4428.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4429.             (see AX=0300h)
  4430. Return: CF set on error
  4431.     CF clear if successful
  4432.         CX:DX = segment:offset of real mode call address
  4433. Notes:    the real mode call structure is static, causing reentrancy problems
  4434.     the called procedure must modify the real mode CS:IP before returning
  4435.     values are returned to real mode by modifying the real mode call struc
  4436.     DPMI hosts should provide for at least 16 call-backs per task
  4437. SeeAlso: AX=0304h
  4438.  
  4439. Values call-back procedure is called with:
  4440.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  4441.     ES:DI / ES:EDI = selector:offset of real mode call structure
  4442.     SS:SP / SS:ESP = locked protected omde API stack
  4443.     interrupts disabled
  4444. Return: (with IRET)
  4445.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  4446. ---------------------------------------------
  4447. INT 31 - DPMI 0.9 API - protected mode - FREE REAL MODE CALL-BACK ADDRESS
  4448.     AX = 0304h
  4449.     CX:DX = real mode call-back address
  4450. Return: CF set on error
  4451.     CF clear if successful
  4452. SeeAlso: AX=0303h
  4453. ---------------------------------------------
  4454. INT 31 - DPMI 0.9 API - protected mode - GET STATE SAVE/RESTORE ADDRESSES
  4455.     AX = 0305h
  4456. Return: CF set on error
  4457.     CF clear if successfule
  4458.         AX = size in bytes of state buffer
  4459.         BX:CX = real mode address of procedure to save/restore state
  4460.         SI:DI / SI:EDI = protected mode procedure to save/restore state
  4461. Notes:    the buffer size will be zero if it is not necessary to preserve state
  4462.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  4463.     this function is only needed if using the raw mode switch service
  4464. SeeAlso: AX=0306h
  4465.  
  4466. Values to call state-save procedures with:
  4467.     AL = direction
  4468.         00h save state
  4469.         01h restore state
  4470.     ES:DI / ES:EDI -> state buffer
  4471. Return: all registers preserved
  4472. ---------------------------------------------
  4473. INT 31 - DPMI 0.9 API - protected mode - GET RAW MODE SWITCH ADDRESSES
  4474.     AX = 0306h
  4475. Return: CF set on error
  4476.     CF clear if successful
  4477.         BX:CX -> procedure to switch from real to protected mode
  4478.         SI:DI / SI:EDI -> procedure to switch from protected to real mode
  4479. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  4480.     the caller must save and restore the state of the task with AX=0305h
  4481. SeeAlso: AX=0305h
  4482.  
  4483. Values to JUMP at mode-switch procedures with:
  4484.     AX = new DS
  4485.     CX = new ES
  4486.     DX = new SS
  4487.     BX / EBX = new SP / ESP
  4488.     SI = new CS
  4489.     DI / EDI = new IP / EIP
  4490. Note:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  4491.       DX/EDX, SI/ESI, and DI/EDI will be undefined
  4492. ---------------------------------------------
  4493. INT 31 - DPMI 0.9 API - protected mode - GET DPMI VERSION
  4494.     AX = 0400h
  4495. Return: CF clear
  4496.     AH = major version
  4497.     AL = minor version
  4498.     BX = flags
  4499.         bit 0: running under an 80386 implementation
  4500.         bit 1: processor returns to real mode for reflected interrupts
  4501.            instead of V86 mode
  4502.         bit 2: virtual memory supported
  4503.         bit 3: reserved (undefined)
  4504.         others reserved (zero)
  4505.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4506.     DH = curr value of virtual master interrupt controller base interrupt
  4507.     DL = curr value of virtual slave interrupt controller base interrupt
  4508. ---------------------------------------------
  4509. INT 31 - DPMI 0.9 API - protected mode - GET FREE MEMORY INFORMATION
  4510.     AX = 0500h
  4511.     ES:DI / ES:EDI -> buffer for memory information (see below)
  4512. Return: CF clear
  4513. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  4514.     this function must be considered advisory because other applications
  4515.       may affect the results at any time after the call
  4516.     fields not supported by the DPMI implementation are filled with
  4517.       FFFFFFFFh
  4518. SeeAlso: AX=0501h, AX=0604h
  4519.  
  4520. Format of memory information:
  4521. Offset    Size    Description
  4522.  00h    DWORD    largest available block in bytes
  4523.  04h    DWORD    maximum unlocked page allocation
  4524.  08h    DWORD    maximum locked page allocation
  4525.  0Ch    DWORD    linear address space in pages
  4526.  10h    DWORD    total unlocked pages
  4527.  14h    DWORD    free pages
  4528.  18h    DWORD    total physical pages
  4529.  1Ch    DWORD    free linear address space in pages
  4530.  20h    DWORD    size of paging file/partition in pages
  4531.  24h 12 BYTEs    reserved
  4532. ---------------------------------------------
  4533. INT 31 - DPMI 0.9 API - protected mode - ALLOCATE MEMORY BLOCK
  4534.     AX = 0501h
  4535.     BX:CX = size in bytes
  4536. Return: CF set on error
  4537.     CF clear if successful
  4538.         BX:CX = linear address of block
  4539.         SI:DI = memory block handle
  4540. Notes:    no selectors are allocated
  4541.     the memory block is allocated unlocked
  4542.     allocations are often page granular
  4543. SeeAlso: AX=0000h, AX=0100h, AX=0500h, AX=0502h, AX=0503h
  4544. ---------------------------------------------
  4545. INT 31 - DPMI 0.9 API - protected mode - FREE MEMORY BLOCK
  4546.     AX = 0502h
  4547.     SI:DI = handle of memory block
  4548. Return: CF set on error
  4549.     CF clear if successful
  4550. Note:    any selectors allocated for the memory block must also be freed
  4551. SeeAlso: AX=0001h, AX=0101h, AX=0501h
  4552. ---------------------------------------------
  4553. INT 31 - DPMI 0.9 API - protected mode - RESIZE MEMORY BLOCK
  4554.     AX = 0503h
  4555.     BX:CX = new size in bytes
  4556.     SI:DI = handle of memory block
  4557. Return: CF set on error
  4558.     CF clear if successful
  4559.         BX:CX = new linear address
  4560.         SI:DI = new handle of memory block
  4561. Note:    any selectors pointing at the block must be updated
  4562.     an error is returned if the new size is 0
  4563. SeeAlso: AX=0102h, AX=0501h
  4564. ---------------------------------------------
  4565. INT 31 - DPMI 0.9 API - protected mode - LOCK LINEAR REGION
  4566.     AX = 0600h
  4567.     BX:CX = starting linear address
  4568.     SI:DI = size of region in bytes
  4569. Return: CF set on error
  4570.         none of the memory is locked
  4571.     CF clear if successful
  4572. Note:    pages at beginning and end will be locked if the region overlaps them
  4573. SeeAlso: AX=0601h
  4574. ---------------------------------------------
  4575. INT 31 - DPMI 0.9 API - protected mode - UNLOCK LINEAR REGION
  4576.     AX = 0601h
  4577.     BX:CX = starting linear address
  4578.     SI:DI = size of region in bytes
  4579. Return: CF set on error
  4580.         none of the memory is unlocked
  4581.     CF clear if successful
  4582. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  4583.     memory whose lock count has not reached zero remains locked
  4584. SeeAlso: AX=0600h
  4585. ---------------------------------------------
  4586. INT 31 - DPMI 0.9 API - protected mode - MARK REAL MODE REGION AS PAGEABLE
  4587.     AX = 0602h
  4588.     BX:CX = starting linear address
  4589.     SI:DI = size of region in bytes
  4590. Return: CF set on error    
  4591.         none of the memory is made pageable
  4592.     CF clear if successful
  4593. Notes:    relock all unlocked real mode memory before terminating process
  4594.     pages at beginning and end will be unlocked if the region overlaps them
  4595.     pageability of real mode pages is binary, not a count
  4596. SeeAlso: AX=0600h,AX=0603h
  4597. ---------------------------------------------
  4598. INT 31 - DPMI 0.9 API - protected mode - RELOCK REAL MODE REGION
  4599.     AX = 0603h
  4600.     BX:CX = starting linear address
  4601.     SI:DI = size of region in bytes
  4602. Return: CF set on error    
  4603.         none of the memory is relocked
  4604.     CF clear if successful
  4605. Note:    pages at beginning and end will be relocked if the region overlaps them
  4606. SeeAlso: AX=0602h
  4607. ---------------------------------------------
  4608. INT 31 - DPMI 0.9 API - protected mode - GET PAGE SIZE
  4609.     AX = 0604h
  4610. Return: CF set on error
  4611.     CF clear if successful
  4612.         BX:CX = page size in bytes
  4613. ---------------------------------------------
  4614. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4615.     AX = 0700h
  4616. ---------------------------------------------
  4617. INT 31 - DPMI 0.9 API - protected mode - RESERVED
  4618.     AX = 0701h
  4619. ---------------------------------------------
  4620. INT 31 - DPMI 0.9 API - protected mode - MARK PAGE AS DEMAND PAGING CANDIDATE
  4621.     AX = 0702h
  4622.     BX:CX = starting linear address
  4623.     SI:DI = number of bytes to mark as paging candidates
  4624. Return: CF set on error
  4625.     CF clear if successful
  4626. Notes:    this function is advisory, and does not force immediate paging
  4627.     partial pages will not be discarded
  4628. SeeAlso: AX=0703h
  4629. ---------------------------------------------
  4630. INT 31 - DPMI 0.9 API - protected mode - DISCARD PAGE CONTENTS
  4631.     AX = 0703h
  4632.     BX:CX = starting linear address
  4633.     SI:DI = number of bytes to mark as paging candidates
  4634. Return: CF set on error
  4635.     CF clear if successful
  4636. Notes:    this function is advisory, and may be ignored by DPMI implementations
  4637.     partial pages will not be discarded
  4638. SeeAlso: AX=0702h
  4639. ---------------------------------------------
  4640. INT 31 - DPMI 0.9 API - protected mode - PHYSICAL ADDRESS MAPPING
  4641.     AX = 0800h
  4642.     BX:CX = physical address
  4643.     SI:DI = size in bytes
  4644. Return: CF set on error
  4645.     CF clear if successful
  4646.         BX:CX = linear address which maps the requested physical memory
  4647. Notes:    implementations may refuse this call because it can circumvent protects
  4648.     the caller must build an appropriate selector for the memory
  4649.     do not use for memory mapped in the first megabyte
  4650. ---------------------------------------------
  4651. INT 31 - DPMI 0.9 API - protected mode - GET AND DISABLE VIRTUAL INTERRPT STATE
  4652.     AX = 0900h
  4653. Return: CF clear
  4654.     virtual interrupts disabled
  4655.     AL = 00h if previously disabled
  4656.        = 01h if previously enabled
  4657.     AH preserved
  4658. Note:    the previous state may be restored simply by executing an INT 31
  4659. SeeAlso: AX=0901h,AX=0902h
  4660. ---------------------------------------------
  4661. INT 31 - DPMI 0.9 API - protected mode - GET AND ENABLE VIRTUAL INTERRUPT STATE
  4662.     AX = 0901h
  4663. Return: CF clear
  4664.     virtual interrupts enabled
  4665.     AL = 00h if previously disabled
  4666.        = 01h if previously enabled
  4667.     AH preserved
  4668. Note:    the previous state may be restored simply by executing an INT 31
  4669. SeeAlso: AX=0900h, AX=0902h
  4670. ---------------------------------------------
  4671. INT 31 - DPMI 0.9 API - protected mode - GET VIRTUAL INTERRUPT STATE
  4672.     AX = 0902h
  4673. Return: CF clear
  4674.     AL = 00h if disabled
  4675.        = 01h if enabled
  4676. SeeAlso: AX=0900h, AX=0901h
  4677. ---------------------------------------------
  4678. INT 31 - DPMI 0.9 API - protected mode - GET VENDOR SPECIFIC API ENTRY POINT
  4679.     AX = 0A00h
  4680.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  4681. Return: CF set on error
  4682.     CF clear if successful
  4683.         ES:DI / ES:EDI -> FAR extended API entry point
  4684.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  4685. Note:    extended API parameters are vendor-specific
  4686. ---------------------------------------------
  4687. INT 31 - DPMI 0.9 API - protected mode - SET DEBUG WATCHPOINT
  4688.     AX = 0B00h
  4689.     BX:CX = linear address
  4690.     DL = size (1,2,4 bytes)
  4691.     DH = type (00h execute, 01h write, 02h read/write)
  4692. Return: CF set on error
  4693.     CF clear if successful
  4694.         BX = watchpoint handle
  4695. SeeAlso: AX=0601h
  4696. ---------------------------------------------
  4697. INT 31 - DPMI 0.9 API - protected mode - CLEAR DEBUG WATCHPOINT
  4698.     AX = 0B01h
  4699.     BX = watchpoint handle
  4700. Return: CF set on error
  4701.     CF clear if successful
  4702. Note:    the watchpoint handle is freed
  4703. SeeAlso: AX=0B00h
  4704. ---------------------------------------------
  4705. INT 31 - DPMI 0.9 API - protected mode - GET STATE OF DEBUG WATCHPOINT
  4706.     AX = 0B02h
  4707.     BX = watchpoint handle
  4708. Return: CF set on error
  4709.     CF clear if successful
  4710.         AX = status flags
  4711.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  4712. SeeAlso: AX=0B00h, AX=0B03h
  4713. ---------------------------------------------
  4714. INT 31 - DPMI 0.9 API - protected mode - RESET DEBUG WATCHPOINT
  4715.     AX = 0B03h
  4716.     BX = watchpoint handle
  4717. Return: CF set on error
  4718.     CF clear if successful
  4719. SeeAlso: AX=0B02h
  4720. ---------------------------------------------
  4721. INT 32 - reserved
  4722. ---------------------------------------------
  4723. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  4724.     AX = 0000h
  4725. Return: AX = status
  4726.         0000h hardware/driver not installed
  4727.         FFFFh hardware/driver installed
  4728.     BX = number of buttons
  4729.         FFFFh two buttons
  4730.         0000h other than two
  4731.         0003h Mouse Systems/Logitech mouse
  4732. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  4733.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  4734.       and then call this function.
  4735.     the Logitech mouse driver contains the signature string "LOGITECH"
  4736. SeeAlso: INT 74
  4737. ---------------------------------------------
  4738. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  4739.     AX = 0001h
  4740. SeeAlso: AX=0002h
  4741. ---------------------------------------------
  4742. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  4743.     AX = 0002h
  4744. Note:    multiple calls to hide the cursor will require multiple calls to
  4745.       function 01h to unhide it.
  4746. SeeAlso: AX=0001h
  4747. ---------------------------------------------
  4748. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  4749.     AX = 0003h
  4750. Return: BX = button status
  4751.        bit 0  left button pressed if 1
  4752.        bit 1  right button pressed if 1
  4753.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4754.     CX = column
  4755.     DX = row
  4756. SeeAlso: AX=0004h
  4757. ---------------------------------------------
  4758. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  4759.     AX = 0004h
  4760.     CX = column
  4761.     DX = row
  4762. Note:    the row and column are truncated to the next lower multiple of the cell
  4763.       size; however, some versions of the Microsoft documentation
  4764.       incorrectly state that the coordinates are rounded
  4765. SeeAlso: AX=0003h
  4766. ---------------------------------------------
  4767. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  4768.     AX = 0005h
  4769.     BX = button
  4770.         0000h left
  4771.         0001h right
  4772.         0002h middle (Mouse Systems/Logitech mouse)
  4773. Return: AX = button states
  4774.         bit 0 left button pressed if 1
  4775.         bit 1 right button pressed if 1
  4776.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4777.     BX = number of times specified button has been pressed since last call
  4778.     CX = column at time specified button was last pressed
  4779.     DX = row at time specified button was last pressed
  4780. SeeAlso: AX=0006h
  4781. ---------------------------------------------
  4782. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  4783.     AX = 0006h
  4784.     BX = button
  4785.         0000h left
  4786.         0001h right
  4787.         0002h middle (Mouse Systems/Logitech mouse)
  4788. Return: AX = button states
  4789.         bit 0 left button pressed if 1
  4790.         bit 1 right button pressed if 1
  4791.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  4792.     BX = number of times specified button has been released since last call
  4793.     CX = column at time specified button was last released
  4794.     DX = row at time specified button was last released
  4795. SeeAlso: AX=0005h
  4796. ---------------------------------------------
  4797. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  4798.     AX = 0007h
  4799.     CX = minimum column
  4800.     DX = maximum column
  4801. SeeAlso: AX=0008h
  4802. ---------------------------------------------
  4803. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  4804.     AX = 0008h
  4805.     CX = minimum row
  4806.     DX = maximum row
  4807. SeeAlso: AX=0007h
  4808. ---------------------------------------------
  4809. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  4810.     AX = 0009h
  4811.     BX = column of cursor hot spot in bitmap (-16 to 16)
  4812.     CX = row of cursor hot spot (-16 to 16)
  4813.     ES:DX -> bitmap
  4814.         16 words screen mask
  4815.         16 words cursor mask
  4816.             each word defines the sixteen pixels of a row, low bit
  4817.             rightmost
  4818. SeeAlso: AX=000Ah
  4819. ---------------------------------------------
  4820. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  4821.     AX = 000Ah
  4822.     BX = hardware/software text cursor
  4823.         0000h software
  4824.         CX = screen mask
  4825.         DX = cursor mask
  4826.         0001h hardware
  4827.         CX = start scan line
  4828.         DX = end scan line
  4829. Note:    when the software cursor is selected, the char/attribute data at the
  4830.       current screen position is ANDed with the screen mask and then XORed
  4831.       with the cursor mask
  4832. SeeAlso: AX=0009h
  4833. ---------------------------------------------
  4834. INT 33 - MS MOUSE - READ MOTION COUNTERS
  4835.     AX = 000Bh
  4836. Return: CX = number of mickeys mouse moved horizontally since last call
  4837.     DX = number of mickeys mouse moved vertically
  4838. Notes:    a mickey is the smallest increment the mouse can sense
  4839.     positive values indicate down/right
  4840. ---------------------------------------------
  4841. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  4842.     AX = 000Ch
  4843.     CX = call mask
  4844.          bit 0 call if mouse moves
  4845.          bit 1 call if left button pressed
  4846.          bit 2 call if left button released
  4847.          bit 3 call if right button pressed
  4848.          bit 4 call if right button released
  4849.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  4850.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  4851.     ES:DX -> FAR routine
  4852. Notes:    when the subroutine is called, it is passed the following values:
  4853.       AX = condition mask (same bit assignments as call mask)
  4854.       BX = button state
  4855.       CX = cursor column
  4856.       DX = cursor row
  4857.       SI = horizontal mickey count
  4858.       DI = vertical mickey count
  4859.     some versions of the Microsoft documentation incorrectly state that CX
  4860.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  4861.       and DI
  4862. ---------------------------------------------
  4863. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  4864.     AX = 000Dh
  4865. SeeAlso: AX=000Eh
  4866. ---------------------------------------------
  4867. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  4868.     AX = 000Eh
  4869. SeeAlso: AX=000Dh
  4870. ---------------------------------------------
  4871. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  4872.     AX = 000Fh
  4873.     CX = number of mickeys per 8 pixels horizontally (default 8)
  4874.     DX = number of mickeys per 8 pixels vertically (default 16)
  4875. ---------------------------------------------
  4876. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  4877.     AX = 0010h
  4878.     CX,DX = X,Y coordinates of upper left corner
  4879.     SI,DI = X,Y coordinates of lower right corner
  4880. Note:    mouse cursor is hidden during updating, and needs to be explicitly
  4881.       turned on again
  4882. ---------------------------------------------
  4883. INT 33 - PCMOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  4884.     AX = 0012h
  4885.     BH = cursor width in words
  4886.     CH = rows in cursor
  4887.     BL = horizontal hot spot (-16 to 16)
  4888.     CL = vertical hot spot (-16 to 16)
  4889.     ES:DX -> bit map of screen and cursor maps
  4890. Return: AX = -1 if successful
  4891. ---------------------------------------------
  4892. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  4893.     AX = 0013h
  4894.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  4895. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  4896. ---------------------------------------------
  4897. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  4898.     AX = 0014h
  4899.     CX = call mask (see AX=000Ch)
  4900.     ES:DX -> FAR routine 
  4901. Return: CX = call mask of previous interrupt routine
  4902.     ES:DX = FAR address of previous interrupt routine
  4903. ---------------------------------------------
  4904. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  4905.     AX = 0015h
  4906. Return: BX = size of buffer needed to store driver state
  4907. ---------------------------------------------
  4908. INT 33 - MS MOUSE - SAVE DRIVER STATE
  4909.     AX = 0016h
  4910.     ES:DX -> buffer for driver state
  4911. SeeAlso: AX=0017h
  4912. ---------------------------------------------
  4913. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  4914.     AX = 0017h
  4915.     ES:DX -> buffer containing saved state
  4916. SeeAlso: AX=0016h
  4917. ---------------------------------------------
  4918. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  4919.     AX = 0018h
  4920.     CX = call mask
  4921.          bit 0 call if alt key pressed during event
  4922.          bit 1 call if ctrl key pressed during event
  4923.          bit 2 call if shift button pressed during event
  4924.          bit 3 call if right button released
  4925.          bit 4 call if right button pressed
  4926.          bit 5 call if left button released
  4927.          bit 6 call if left button pressed
  4928.          bit 7 call if mouse moves
  4929.     BX(???):DX = address of FAR routine
  4930. Notes:    when the subroutine is called, it is passed the following values:
  4931.       AX = condition mask (same bit assignments as call mask)
  4932.       BX = button state
  4933.       CX = cursor column
  4934.       DX = cursor row
  4935.       DI = horizontal mickey count
  4936.       SI = vertical mickey count
  4937.     up to three handlers can be defined by separate calls to this function
  4938. ---------------------------------------------
  4939. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  4940.     AX = 0019h
  4941.     CX = call mask
  4942. Return: BX:DX = user interrupt vector
  4943.     CX = call mask (0 if not found)
  4944. Note:    attempts to find a user event handler (defined by function 18h)
  4945.       whose call mask matches CX
  4946. ---------------------------------------------
  4947. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  4948.     AX = 001Ah
  4949.     BX = horizontal speed \
  4950.     CX = vertical speed   / (see AX=000Fh)
  4951.     DX = double speed threshold (see AX=0013h)
  4952. SeeAlso: AX=001Bh
  4953. ---------------------------------------------
  4954. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  4955.     AX = 001Bh
  4956. Return: BX = horizontal speed
  4957.     CX = vertical speed
  4958.     DX = double speed threshold
  4959. SeeAlso: AX=001Ah
  4960. ---------------------------------------------
  4961. INT 33 - MS MOUSE - SET INTERRUPT RATE
  4962.     AX = 001Ch
  4963.     BX = rate
  4964.         00h no interrupts allowed
  4965.         01h 30 per second
  4966.         02h 50 per second
  4967.         03h 100 per second
  4968.         04h 200 per second
  4969. Notes:    only available on InPort mouse
  4970.     values greater than 4 may cause unpredictable driver behavior
  4971. ---------------------------------------------
  4972. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  4973.     AX = 001Dh
  4974.     BX = display page number
  4975. Note:    the cursor will be displayed on the specified page
  4976. ---------------------------------------------
  4977. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  4978.     AX = 001Eh
  4979. Return: BX = display page number
  4980. ---------------------------------------------
  4981. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  4982.     AX = 001Fh
  4983. Return: AX = 001Fh successful
  4984.          FFFFh unsuccessful
  4985.     ES:BX = vector for Int 33h before mouse driver was first installed
  4986. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  4987.     if you restore Int 33h to ES:BX, driver will be completely disabled
  4988. ---------------------------------------------
  4989. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  4990.     AX = 0020h
  4991. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  4992.       which were removed by function 1Fh
  4993. ---------------------------------------------
  4994. INT 33 - MS MOUSE - SOFTWARE RESET
  4995.     AX = 0021h
  4996. Return: AX = FFFFh if mouse driver installed
  4997.          0021h if mouse driver not installed
  4998.     BX = 2 if mouse driver is installed
  4999. Note:    identical to funtion 00h, but does not reset the mouse
  5000. ---------------------------------------------
  5001. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  5002.     AX = 0022h
  5003.     BX = language
  5004.         00h English
  5005.         01h French
  5006.         02h Dutch
  5007.         03h German
  5008.         04h Swedish
  5009.         05h Finnish
  5010.         06h Spanish
  5011.         07h Portugese
  5012.         08h Italian
  5013. Note:    only available on international versions of the driver, US versions
  5014.       ignore this call
  5015. SeeAlso: AX=0023h
  5016. ---------------------------------------------
  5017. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  5018.     AX = 0023h
  5019. Return:    BX = language (see AX=0022h)
  5020. Note:    the US version of the driver always returns zero 
  5021. SeeAlso: AX=0022h
  5022. ---------------------------------------------
  5023. INT 33 - MS MOUSE - GET SOFTWARE VERSION AND MOUSE TYPE
  5024.     AX = 0024h
  5025. Return: AX = FFFFh on error
  5026.     otherwise,
  5027.         BH = major version
  5028.         BL = minor version
  5029.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  5030.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  5031. ---------------------------------------------
  5032. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  5033.     AX = 0042h
  5034. Return: AX = FFFFh successful
  5035.         BX = buffer size in bytes for functions 50h and 52h
  5036.        = 0000h MSMOUSE not installed
  5037.        = 0042h functions 42h, 50h, and 52h not supported
  5038. SeeAlso: AX=0050h
  5039. ---------------------------------------------
  5040. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  5041.     AX = 0050h
  5042.     BX = buffer size
  5043.     ES:DX -> buffer
  5044. Return: AX = FFFFh if successful
  5045. SeeAlso: AX=0042h,0052h
  5046. ---------------------------------------------
  5047. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  5048.     AX = 0052h
  5049.     BX = buffer size
  5050.     ES:DX -> buffer
  5051. Return: AX = FFFFh if successful
  5052. SeeAlso: AX=0050h
  5053. ---------------------------------------------
  5054. INT 34 - Borland/Microsoft languages - Floating Point emulation
  5055.     This interrupt emulates opcode D8h
  5056. ---------------------------------------------
  5057. INT 35 - Borland/Microsoft languages - Floating Point emulation
  5058.     This interrupt emulates opcode D9h
  5059. ---------------------------------------------
  5060. INT 36 - Borland/Microsoft languages - Floating Point emulation
  5061.     This interrupt emulates opcode DAh
  5062. ---------------------------------------------
  5063. INT 37 - Borland/Microsoft languages - Floating Point emulation
  5064.     This interrupt emulates opcode DBh
  5065. ---------------------------------------------
  5066. INT 38 - Borland/Microsoft languages - Floating Point emulation
  5067.     This interrupt emulates opcode DCh
  5068. ---------------------------------------------
  5069. INT 39 - Borland/Microsoft languages - Floating Point emulation
  5070.     This interrupt emulates opcode DDh
  5071. ---------------------------------------------
  5072. INT 3A - Borland/Microsoft languages - Floating Point emulation
  5073.     This interrupt emulates opcode DEh
  5074. ---------------------------------------------
  5075. INT 3B - Borland/Microsoft languages - Floating Point emulation
  5076.     This interrupt emulates opcode DFh
  5077. ---------------------------------------------
  5078. INT 3C - Borland/Microsoft languages - Floating Point emulation
  5079.     This interrupt emulates instructions with an ES segment override
  5080. ---------------------------------------------
  5081. INT 3D - Borland/Microsoft languages - Floating Point emulation
  5082.     This interrupt emulates a standalone FWAIT instruction
  5083. ---------------------------------------------
  5084. INT 3E - Borland languages - Floating Point emulation "shortcut" call
  5085.     The two bytes following the INT 3E instruction are the subcode and
  5086.     a NOP (90h)
  5087.  
  5088. Subcode        Function
  5089.  DCh    load 8086 stack with 8087 registers
  5090.  DEh    load 8087 registers from 8086 stack
  5091.  E0h    round TOS and R1 to single precision, compare, pop twice
  5092.  E2h    round TOS and R1 to double precision, compare, pop twice
  5093.     Note: apparently buggy in TPas5.5, actually rounding to single prec.
  5094.  E4h    compare TOS/R1 with two POP's
  5095.  E6h    compare TOS/R1 with POP
  5096.  E8h    FTST (check TOS value)
  5097.  EAh    FXAM (check TOS value)
  5098.  ECh    sine
  5099.  EEh    cosine
  5100.  F0h    arctangent
  5101.  F2h    check TOS value
  5102.  F4h    Ln (FLDLN2 to TOS)
  5103.  F6h    FLD1 to TOS
  5104.  F8h    FLDLG2 to TOS
  5105.  FAh    Exp (FLDL2E to TOS)
  5106.  FCh    TOS = 2**TOS
  5107.  FEh    FLDL2T to TOS
  5108. ---------------------------------------------
  5109. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE)
  5110. Note:    INT 3F is the default, and may be overridden while linking
  5111. ---------------------------------------------
  5112. INT 3F - Microsoft Dynamic Link Library manager
  5113. ---------------------------------------------
  5114. INT 40 - Hard disk - Relocated Floppy Handler (original INT 13h)
  5115. SeeAlso: INT 63
  5116. ---------------------------------------------
  5117. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  5118. ---------------------------------------------
  5119. INT 41 - (NOT a vector!) FIXED DISK PARAMS (XT,AT,XT2,XT286,PS except ESDI)
  5120. SeeAlso: INT 1E,INT 46
  5121.  
  5122. Format of fixed disk parameters:
  5123. Offset    Size    Description
  5124.  00h    WORD    cylinders
  5125.  02h    BYTE    heads
  5126.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  5127.  05h    WORD    starting write pre-comp cylinder
  5128.  07h    BYTE    maximum ECC burst length
  5129.  08h    BYTE    control byte
  5130.            bits 0-2: drive option (XT only, 0 for others)
  5131.            bit 3:    set if more than 8 heads
  5132.            bit 4:    always 0
  5133.            bit 5:    set if manufacturer's defect map on max cylinder+1
  5134.            bit 6:    disable ECC retries
  5135.            bit 7:    disable access retries
  5136.  09h    BYTE    standard timeout (XT only, 0 for others)
  5137.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  5138.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  5139.  0Ch    WORD    landing zone (AT/PS2)
  5140.  0Eh    BYTE    sectors/track (AT/PS2)
  5141.  0Fh    BYTE    0
  5142. ---------------------------------------------
  5143. INT 41 - Z100 - Master 8259 - Processor Swap
  5144. ---------------------------------------------
  5145. INT 42 - EGA/VGA/PS - Relocated (by EGA) Video Handler (original INT 10h)
  5146. ---------------------------------------------
  5147. INT 42 - Z100 - Master 8259 - Timer
  5148. ---------------------------------------------
  5149. INT 43 - EGA/VGA/PS - User font table
  5150. SeeAlso: INT 1F,INT 44
  5151. ---------------------------------------------
  5152. INT 43 - Z100 - Master 8259 - Slave 8259 input
  5153. Note:    slave runs in special fully nested mode
  5154. ---------------------------------------------
  5155. INT 44 - EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh
  5156. SeeAlso: INT 1F,INT 43
  5157. ---------------------------------------------
  5158. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  5159. ---------------------------------------------
  5160. INT 44 - Z100 - Master 8259 - Serial A
  5161. ---------------------------------------------
  5162. INT 45 - Z100 - Master 8259 - Serial B
  5163. ---------------------------------------------
  5164. INT 46 - Secondary Fixed Disk Params (AT,XT286,PS except ESDI)
  5165. SeeAlso: INT 41
  5166. ---------------------------------------------
  5167. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  5168. ---------------------------------------------
  5169. INT 47 - Z100 - Master 8259 - Printer
  5170. ---------------------------------------------
  5171. INT 47 - SQL Base - DATABASE ENGINE API
  5172.     AX = 8000h
  5173.     DS:BX -> parameter block, first word is function number
  5174. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  5175.  
  5176. Values for function number:
  5177.  01h    "SQLFINI" initalialize application's use of the database
  5178.  02h    "SQLFDON" application is done using the database
  5179.  03h    "SQLFCON" connect to a cursor/database
  5180.  04h    "SQLFDIS" disconnect from a cursor/database
  5181.  05h    "SQLFCOM" compile a SQL command
  5182.  06h    "SQLFEXE" execute a SQL command
  5183.  07h    "SQLFCEX" compile and execute a SQL command
  5184.  08h    "SQLFCMT" commit a transaction to the database
  5185.  09h    "SQLFDES" describe the items of a SELECT statement
  5186.  0Ah    "SQLFGFI" get fetch information
  5187.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  5188.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  5189.  0Dh    "SQLFEFB" enable fetch backwards
  5190.  0Eh    "SQLFPRS" position in result set
  5191.  0Fh    "SQLFURS" undo result set
  5192.  10h    "SQLFNBV" get number of bind variables
  5193.  11h    "SQLFBND" bind data variables
  5194.  12h    "SQLFBNN" bind numerics
  5195.  13h    "SQLFBLN" bind long number
  5196.  14h    "SQLFBLD" bind long data variables
  5197.  15h    "SQLFSRS" start restriction set processing
  5198.  16h    "SQLFRRS" restart restriction set processing
  5199.  17h    "SQLFCRS" close restriction set
  5200.  18h    "SQLFDRS" drop restriction set
  5201.  19h    "SQLFARF" apply Roll Forward journal
  5202.  1Ah    "SQLFERF" end Roll Forward journal
  5203.  1Bh    "SQLFSRF" start Roll Forward journal
  5204.  1Ch    "SQLFSTO" store a compiled SQL command
  5205.  1Dh    "SQLFRET" retrieve a compiled SQL command
  5206.  1Eh    "SQLFDST" drop a stored command
  5207.  1Fh    "SQLFCTY" get command type
  5208.  20h    "SQLFEPO" get error position
  5209.  21h    "SQLFGNR" get number of rows
  5210.  22h    "SQLFNSI" get number of select items
  5211.  23h    "SQLFRBF" get Roll Back flag
  5212.  24h    "SQLFRCD" get return code
  5213.  25h    "SQLFROW" get number of ROWs
  5214.  26h    "SQLFSCN" set cursor name
  5215.  27h    "SQLFSIL" set isolation level
  5216.  28h    "SQLFSLP" set log parameters
  5217.  29h    "SQLFSSB" set select buffer
  5218.  2Ah    "SQLFSSS" set sort space
  5219.  2Bh    "SQLFRLO" read long
  5220.  2Ch    "SQLFWLO" write long
  5221.  2Dh    "SQLFLSK" long seek
  5222.  2Eh    "SQLFGLS" get long size
  5223.  2Fh    "SQLFELO" end long operation
  5224.  30h    "SQLFRBK" roll back a transaction from the database
  5225.  31h    "SQLFERR" error message
  5226.  32h    "SQLFCPY" copy
  5227.  33h    "SQLFR01" reserved
  5228.  34h    "SQLFSYS" system
  5229.  35h    "SQLFSTA" statistics
  5230.  36h    "SQLFR02" reserved
  5231.  37h    "SQLFXAD" extra add
  5232.  38h    "SQLFXCN" extra character to number
  5233.  39h    "SQLFXDA" extra date add
  5234.  3Ah    "SQLFXDP" extra date picture
  5235.  3Bh    "SQLFXDV" extra divide
  5236.  3Ch    "SQLFXML" extra multiply
  5237.  3Dh    "SQLFXNP" extra number picture
  5238.  3Eh    "SQLFXPD" extra picture date
  5239.  3Fh    "SQLFXSB" extra subtract
  5240.  40h    "SQLFINS" install database
  5241.  41h    "SQLFDIN" deinstall database
  5242.  42h    "SQLFDIR" directory of databases
  5243.  43h    "SQLFTIO" timeout
  5244.  44h    "SQLFFQN" get fully qualified column name
  5245.  45h    "SQLFEXP" explain execution plan
  5246.  46h    "SQLFFER" get full error
  5247.  47h    "SQLFBKP" begin online backup
  5248.  48h    "SQLFRDC" read backup data chunk
  5249.  49h    "SQLFEBK" end backup
  5250.  4Ah    "SQLFRES" begin restore from backup
  5251.  4Bh    "SQLFWDC" write backup data chunk for restore
  5252.  4Ch    "SQLFRRD" recover restored database to consistent state
  5253.  4Dh    "SQLFERS" end restore
  5254.  4Eh    "SQLFNRR" return number of result set rows
  5255.  4Fh    "SQLFSTR" start restriction mode
  5256.  50h    "SQLFSPR" stop restriction mode
  5257.  51h    "SQLFCNC" connect 2
  5258.  52h    "SQLFCNR" connect with no recovery
  5259.  53h    "SQLFOMS" set output message size
  5260.  54h    "SQLFIMS" set input message size
  5261.  55h    "SQLFSCP" set cache pages
  5262.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  5263.  57h    "SQLFLAB" get label info for items in SELECT statement
  5264.  58h    "SQLFCBV" clear bind variables
  5265.  59h    "SQLFGET" get database information
  5266.  5Ah    "SQLFSET" set database information
  5267.  5Bh    "SQLFTEC" translate error code
  5268. ---------------------------------------------
  5269. INT 47 - SQL Base - GET VERSION NUMBER
  5270.     AX = 8001h
  5271. Return: ???
  5272. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  5273. ---------------------------------------------
  5274. INT 48 - PCjr - Cordless Keyboard Translation
  5275. ---------------------------------------------
  5276. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  5277. ---------------------------------------------
  5278. INT 49 - PCjr - Non-keyboard Scan Code Translation Table
  5279.  
  5280. Format of translation table:
  5281. Offset    Size    Description
  5282.  00h    BYTE    number of nonkeyboard scancodes in the table
  5283.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  5284.         representing the scancode mapped values relative to their
  5285.         input values within the range of 56h through 7Eh
  5286. ---------------------------------------------
  5287. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  5288. ---------------------------------------------
  5289. INT 4A - AT/CONV/PS - User Alarm
  5290.     Invoked by BIOS when real-time clock alarm occurs
  5291. SeeAlso: INT 1A/AH=06h
  5292. ---------------------------------------------
  5293. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  5294. ---------------------------------------------
  5295. INT 4B - MicroChannel 80386+ - DMA SERVICES INTERFACE
  5296. Note:    this interface allows MicroChannel machines running in virtual 8086
  5297.       mode with paging enabled to emulate the DMA function, virtual memory
  5298.       applications to interrogate or modify the physical addresses that a
  5299.       bus master BIOS/device driver programs into the bus master device,
  5300.       and to lock virtual memory pages into a physical address
  5301. SeeAlso: INT 31
  5302. ---------------------------------------------
  5303. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  5304. ---------------------------------------------
  5305. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  5306. ---------------------------------------------
  5307. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  5308. ---------------------------------------------
  5309. INT 4E - TI Professional PC - DISK I/O
  5310.     used instead of INT 13 on the TI Professional PC
  5311. ---------------------------------------------
  5312. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  5313. ---------------------------------------------
  5314. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  5315. ---------------------------------------------
  5316. INT 50 - through 57 - IRQ0-IRQ7 relocated by DESQview
  5317. ---------------------------------------------
  5318. INT 50 - through 57 - IRQ0-IRQ7 relocated by IBM 3278 emulation control program
  5319. ---------------------------------------------
  5320. INT 58 - reserved
  5321. ---------------------------------------------
  5322. INT 59 - GSS Computer Graphics Interface (GSS*CGI)
  5323.     DS:DX -> block of 5 array pointers
  5324. Return:    CF set on error
  5325.         AX = error code
  5326.     CF clear if successful
  5327.         AX = return code
  5328. Note:    INT 59 is the means by which GSS*CGI language bindings communicate with
  5329.       GSS*CGI device drivers and the GSS*CGI device driver controller.
  5330.     also used by the IBM Graphic Development Toolkit
  5331. ---------------------------------------------
  5332. INT 5A - Cluster adapter BIOS entry address
  5333.     ???
  5334. ---------------------------------------------
  5335. INT 5B - Used by cluster adapter
  5336. ---------------------------------------------
  5337. INT 5C - NETBIOS INTERFACE
  5338.     ES:BX -> Network Control Block (see below)
  5339. Return: AL = status
  5340.         00h successful
  5341.         01h bad buffer size
  5342.         03h invalid NETBIOS command
  5343.         05h timeout
  5344.         06h receive buffer too small
  5345.         08h bad session number
  5346.         09h LAN card out of memory
  5347.         0Ah session closed
  5348.         0Bh command has been cancelled
  5349.         0Dh name already exists
  5350.         0Eh local name table full
  5351.         0Fh name still in use, can't delete
  5352.         11h local session table full
  5353.         12h remote PC not listening
  5354.         13h bad NCB_NUM field
  5355.         14h no answer to CALL or no such remote
  5356.         15h name not in local name table
  5357.         16h duplicate name
  5358.         17h bad delete
  5359.         18h abnormal end
  5360.         19h name error, multiple identical names in use
  5361.         1Ah bad packet
  5362.         21h network card busy
  5363.         22h too many commands queued
  5364.         23h bad LAN card number
  5365.         24h command finished while cancelling
  5366.         26h command can't be cancelled
  5367.         FFh NETBIOS busy
  5368.  
  5369. Format of Network Control Block:
  5370. Offset    Size  Description
  5371.  00h    BYTE  ncb_command (see below)
  5372.  01h    BYTE  ncb_retcode
  5373.  02h    BYTE  ncb_lsn
  5374.  03h    BYTE  ncb_num
  5375.  04h    DWORD -> ncb_buffer
  5376.  08h    WORD  ncb_length
  5377.  0Ah 16 BYTEs ncb_callname
  5378.  1Ah 16 BYTEs ncb_name
  5379.  2Ah    BYTE  ncb_rto
  5380.  2Bh    BYTE  ncb_sto
  5381.  2Ch    DWORD -> ncb_post      /* int (far *ncb_post)(); */
  5382.  30h    BYTE  ncb_lana_num
  5383.  31h    BYTE  ncb_cmd_cplt
  5384.  32h 14 BYTEs ncb_reserve
  5385.  
  5386. Values for ncb_command field in NCB (or with 80h for non-waiting call):
  5387.     10h start session with NCB_NAME name (call)
  5388.     11h listen for call
  5389.     12h end session with NCB_NAME name (hangup)
  5390.     14h send data via NCB_LSN
  5391.     15h receive data from a session
  5392.     16h receive data from any session
  5393.     17h send multiple data buffers
  5394.     20h send unACKed message (datagram)
  5395.     21h receive datagram
  5396.     22h send broadcast datagram
  5397.     23h receive broadcast datagram
  5398.     30h add name to name table
  5399.     31h delete name from name table
  5400.     32h reset adapter card and tables
  5401.     33h get adapter status
  5402.     34h status of all sessions for name
  5403.     35h cancel
  5404.     36h add group name to name table
  5405.     70h unlink from IBM remote program (no F0h function)
  5406.     71h send data without ACK
  5407.     72h send multiple buffers without ACK
  5408.     78h find name
  5409.     79h token-ring protocol trace
  5410.  
  5411. Format of struc name:
  5412. Offset    Size    Description
  5413.  00h 16 BYTEs nm_name
  5414.  10h    BYTE  nm_num
  5415.  11h    BYTE  nm_status
  5416.  
  5417. Format of structure astatus:
  5418.  00h  6 BYTEs as_id
  5419.  06h    BYTE  as_jumpers
  5420.  07h    BYTE  as_post
  5421.  08h    BYTE  as_major
  5422.  09h    BYTE  as_minor
  5423.  0Ah    WORD  as_interval
  5424.  0Ch    WORD  as_crcerr
  5425.  0Eh    WORD  as_algerr
  5426.  10h    WORD  as_colerr
  5427.  12h    WORD  as_abterr
  5428.  14h    DWORD as_tcount
  5429.  18h    DWORD as_rcount
  5430.  1Ch    WORD  as_retran
  5431.  1Eh    WORD  as_xresrc
  5432.  20h  8 BYTEs as_res0
  5433.  28h    WORD  as_ncbfree
  5434.  2Ah    WORD  as_ncbmax
  5435.  2Ch    WORD  as_ncbx
  5436.  2Eh  4 BYTEs as_res1
  5437.  32h    WORD  as_sespend
  5438.  34h    WORD  as_msp
  5439.  36h    WORD  as_sesmax
  5440.  38h    WORD  as_bufsize
  5441.  3Ah    WORD  as_names
  5442.  3Ch 16 name structures  as_name
  5443.  
  5444. Note:    Sytek PCnet card uses DMA 3.
  5445. ---------------------------------------------
  5446. INT 5C - TOPS INTERFACE
  5447.     ES:BX -> Network Control Block
  5448. Note:    TOPS card uses DMA 1, 3 or none.
  5449. ---------------------------------------------
  5450. INT 5D - reserved
  5451. ---------------------------------------------
  5452. INT 5E - reserved
  5453. ---------------------------------------------
  5454. INT 5F - reserved
  5455. ---------------------------------------------
  5456.